Html Select List:为什么onchange会被调用两次?
我有一个选择列表(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。
我同意你的评估。我已经更新了我的小示例http://gutfullofbeer.net/onchange.html,除了包含DOM 0处理程序(使用“onchange”属性设置的处理程序)之外,还包含了一个jQuery处理程序。它似乎是一个jQuery错误,或者至少是jQuery在处理IE怪异方面的失败。
我登录了jQuery票据6593。
感谢您的帮助。 – 2010-05-23 19:32:00
没问题 - 感谢您发现一个有趣的新bug! – Pointy 2010-05-23 19:42:39
我在使用IE8时也遇到了这个问题,并做了一些修改来解决这个问题。
我没有在下拉列表中指定onchange事件,而是使用jquery.change()事件。
标记:
@Html.DropDownList("drpList", myList, new { @class = "myClass", id = "drpList" })
脚本:
$(function() {
$('#drpList').change(function() {
.... your functionality
});
});
这对我的作品..希望这帮助。
您可以将问题隔离为一个简单的应用程序,您可以发布控制器和视图的完整代码? – 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