2010-05-22 38 views
5

我有一個選擇列表(ASP.NET MVC頁)Html Select List:爲什麼onchange會被調用兩次?

的選擇列表和onchange事件的網頁是這樣規定的:

<%=Html.DropDownList("CompanyID", Model.CompanySelectList, "(select company)", new { @class = "data-entry-field", @onchange = "companySelectListChanged()" })%> 

的companySelectListChanged函數獲取調用兩次?

我使用this question的漂亮的代碼來獲取主叫方。

兩次呼叫者是onchange事件,但是,如果我看呼叫者呼叫者使用:

arguments.callee.caller.caller 

的第一個調用返回一些系統碼作爲呼叫者(ⅰ設定)和第二調用返回未定義。

我檢查未定義只能反應一次的onchange,但這似乎並不理想,whcy會的onchange被稱爲兩次?

UPDATE:

OK,發現罪魁禍首! ...除了我之外:-)但是兩次調用companySelectListChanged函數的問題仍然存在。

如上所述,onchange事件直接在select上設置。這將調用companySelectListChanged函數。

..notice的「數據入口域」類,現在在一個單獨的鏈接的JavaScript上的所有字段提交變更事件這一類勢必改變保存按鈕的顏色的功能。這意味着onchange上有兩個事件,但companySelectListChanged被調用兩次?

的另外的結合被設定如下:

$( '數據輸入場 ')結合(' 按鍵KEYUP變化',函數(E){highLightSaveButtons();});

假設可能在選擇列表上有2個更改事件,它會假定設置按鍵事件可能會破壞某些東西?

任何想法?

另一個更新:

select元素看起來不錯,所有的作品如果我刪除了額外的「變化」的結合。當添加'change'綁定時,該事件觸發一次,硬連線的'onchange'被觸發兩次。

如果這兩個事件都通過jQuery綁定的所有工作正常,似乎混合的onchange硬連線和jQuery勢必改變事件不能混用?我想這回答了我的問題,但似乎像IE的問題,並綁定這些事件與jQuery。

+0

您可以將問題隔離爲一個簡單的應用程序,您可以發佈控制器和視圖的完整代碼? – 2010-05-22 18:04:47

+0

您是否有任何其他代碼使用其他方法將事件處理程序附加到元素?你描述的內容聽起來像函數被註冊爲一個事件處理程序*兩次* - 一次在onclick屬性的直接設置中,一次通過其他機制(例如,'attachEvent()'或通過像Prototype這樣的框架或jQuery的)。 – Pointy 2010-05-22 18:43:59

+0

如上所述,onchange事件直接綁定到選擇列表,companySelectListChanged()函數調用其他兩個使jQuery ajax發佈的函數。沒有其他代碼綁定onchange事件。 – 2010-05-22 18:53:12

回答

3

我同意你的評估。我已經更新了我的小示例http://gutfullofbeer.net/onchange.html,除了包含DOM 0處理程序(使用「onchange」屬性設置的處理程序)之外,還包含了一個jQuery處理程序。它似乎是一個jQuery錯誤,或者至少是jQuery在處理IE怪異方面的失敗。

我登錄了jQuery票據6593。

+0

感謝您的幫助。 – 2010-05-23 19:32:00

+0

沒問題 - 感謝您發現一個有趣的新bug! – Pointy 2010-05-23 19:42:39

2

我在使用IE8時也遇到了這個問題,並做了一些修改來解決這個問題。

我沒有在下拉列表中指定onchange事件,而是使用jquery.change()事件。

標記:

@Html.DropDownList("drpList", myList, new { @class = "myClass", id = "drpList" }) 

腳本:

$(function() { 
    $('#drpList').change(function() { 
    .... your functionality 
    }); 
}); 

這對我的作品..希望這幫助。

相關問題