我有一個選擇列表(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。
您可以將問題隔離爲一個簡單的應用程序,您可以發佈控制器和視圖的完整代碼? – 2010-05-22 18:04:47
您是否有任何其他代碼使用其他方法將事件處理程序附加到元素?你描述的內容聽起來像函數被註冊爲一個事件處理程序*兩次* - 一次在onclick屬性的直接設置中,一次通過其他機制(例如,'attachEvent()'或通過像Prototype這樣的框架或jQuery的)。 – Pointy 2010-05-22 18:43:59
如上所述,onchange事件直接綁定到選擇列表,companySelectListChanged()函數調用其他兩個使jQuery ajax發佈的函數。沒有其他代碼綁定onchange事件。 – 2010-05-22 18:53:12