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。

+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

我同意你的评估。我已经更新了我的小示例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

我在使用IE8时也遇到了这个问题,并做了一些修改来解决这个问题。

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

标记:

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

脚本:

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

这对我的作品..希望这帮助。