2010-08-28 69 views
0

到field.onchange我有HTML代碼,調用從形式的JavaScript函數,使用:執行基準在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);" /> 
... 

在JavaScript代碼:

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不是一個函數

如何從JavaScript在FireFox執行 「dest.onchange()」 有什麼建議?

我需要此功能以級聯更改輸入表單中的字段。

回答

0

要執行的事件,不添加「上」前綴,只是運行dest.change();

+0

事實上,事實並非如此。這也給出了一個錯誤: 錯誤:dest.change不是一個函數 – user431329 2010-08-28 11:59:43

0

這似乎從更多的研究,在我的O'Reilly的JavaScript的袖珍參考,我覺得有,指出一個段落:

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不能很好地播放。