2010-08-28 4 views
0

У меня есть HTML-код, который называет яваскрипт функцию из формы, используя:выполнения ссылки на field.onchange в Firefox

<form name="f" id="f" ...> 
    <input name="myField" onchange="doFunct(f.myField.value,f.yourField);" /> 
    <input name="yourfield" onchange="doFunct(f.yourField.value,f.anotherField);" /> 
... 

В яваскрипте кода:

function doFunct(field,dest){ 
    // do something with field 
    dest.value = field; 
    // see if the dest has a change field 
    if (dest.onchange !== null) { 
     //we have an onchange function, so let's do it! 
     dest.onchange(); 
    } 
} 

Это прекрасно работает в Safari, Opera и Chrome. Он терпит неудачу в FireFox с ошибкой:

Ошибка: dest.onchange не является функцией

Любые предложения о том, как выполнить "dest.onchange()" из JavaScript в FireFox?

Мне нужна эта возможность для каскадных изменений полей в форме ввода.

ответ

0

Для выполнения события, не добавляйте «на» приставку к нему, просто запустите dest.change();

+0

Собственно, это неправда. Это ТАКЖЕ дает ошибку: Ошибка: dest.change не является функцией – user431329

0

Как видно из дальнейших исследований, в моем O'Reilly JavaScript карманного Reference, я считаю, что есть пункт, который гласит:

null (и неопределенными)

JavaScript ключевое слово null является особым значением, которое не означает "никакой ценности". Если переменная содержит null, вы знаете, что она не содержит допустимого значения любого типа. В JavaScript есть еще одно специальное значение: неопределенное значение. Это значение возвращается при использовании необъявленной или неинициализированной переменной или при использовании несуществующего свойства объекта. Ключевое слово JavaScript для этого значения отсутствует.

После некоторого тестирования с предупреждением (dest.onchange) я обнаружил, что Firefox не жаловался на каждый вызов dest.onchange(), но только те, которые были ошибки (неопределенные). По-видимому (Grrrr!) Firefox не получил заметку: [Ключевое слово JavaScript для этого значения отсутствует.]

Если я изменю свой код для проверки на dest.onchange !== undefined, тогда Firefox будет рад, но тогда проверка Safari, Opera и Chrome FAIL. Если я изменю код, как показано ниже, он будет работать во всех четырех браузерах.

if ((dest.onchange !== null)    // test for safari, chrome, opera 
    && (dest.onchange !== undefined)) { // test for firefox 
    //we have an onchange function, so let's do it! 
    dest.onchange(); 
} 

И я должен потратить 8 часов, пытаясь понять, почему Firefox не играет хорошо.