Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Html选择列表:为什么要调用onchange两次?_Javascript_Html_Asp.net Mvc - Fatal编程技术网

Javascript Html选择列表:为什么要调用onchange两次?

Javascript Html选择列表:为什么要调用onchange两次?,javascript,html,asp.net-mvc,Javascript,Html,Asp.net Mvc,我有一个带有选择列表的页面(ASP.NET MVC页面) 选择列表和onchange事件的指定方式如下: <%=Html.DropDownList("CompanyID", Model.CompanySelectList, "(select company)", new { @class = "data-entry-field", @onchange = "companySelectListChanged()" })%> 第一个调用作为调用方返回一些系统代码(我猜),第二个调用返回

我有一个带有选择列表的页面(ASP.NET MVC页面)

选择列表和onchange事件的指定方式如下:

<%=Html.DropDownList("CompanyID", Model.CompanySelectList, "(select company)", new { @class = "data-entry-field", @onchange = "companySelectListChanged()" })%>
第一个调用作为调用方返回一些系统代码(我猜),第二个调用返回未定义的代码

我正在检查undefined是否只对onchange进行一次响应,但这似乎并不理想,为什么onchange会被调用两次

更新:

好的,找到罪犯了。。。除了我:-)但是调用companySelectListChanged函数两次的问题仍然存在

onchange事件直接在select上设置,如上所述。这将调用companySelectListChanged函数

..注意“data entry field”类,现在在一个单独的链接javascript文件中,该类所有字段上的更改事件都绑定到一个更改保存按钮颜色的函数。这意味着onchange上有两个事件,但是companySelectListChanged调用了两次

附加绑定设置如下:

$('.data entry field').bind('keypress keyup change',函数(e){highLightSaveButtons();})

假设选择列表上可能有2个更改事件,那么它会假设设置keypress&keyup事件可能会破坏某些东西

有什么想法吗

另一个更新:

select元素看起来很好,如果我删除额外的“更改”绑定,所有这些都可以工作。添加“change”绑定时,事件触发一次,硬连线的“onchange”触发两次


如果这两个事件都是通过jQuery绑定的,那么所有工作正常,那么硬连线onchange和jQuery绑定的变更事件似乎不能混合使用?我想这回答了我的问题,但似乎是IE的问题,并将这些事件与jquery绑定。

我同意你的评估。我已经在更新了我的小示例,除了dom0处理程序(设置了“onchange”属性)之外,还包括了jQuery处理程序。这似乎是jQuery的一个bug,或者至少是jQuery在处理IE怪癖方面的失败


我记录了jQuery票证6593。

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

我没有在dropdownlist上指定onchange事件,而是使用jquery.change()事件

标记:

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

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

这对我有用。。希望对您有所帮助。

您能否将问题隔离到一个简单的应用程序中,以便发布控制器和视图的完整代码?是否有其他代码使用其他方法将事件处理程序附加到元素?您描述的内容听起来像是函数被注册为事件处理程序两次—一次是在
onclick
属性的直接设置中注册,一次是通过其他机制注册(例如,
attachEvent()
或通过原型或jQuery之类的框架注册)。onchange事件直接绑定到前面提到的选择列表,companySelectListChanged()函数调用另外两个生成jquery ajax帖子的函数。没有其他代码绑定onchange事件。作为调试或事实调查练习,您可以尝试让处理程序向事件对象添加属性。在添加属性之前,它应该检查属性是否已经存在。如果这是真的,那么您知道处理程序在同一事件上被调用了两次。如果不是,那么它是因为两个单独的事件而被调用的。Well是一个测试程序,它具有一个
元素的“onchange”处理程序。这不会在我尝试过的任何浏览器中生成2个更改事件。ASP代码扩展后的最终HTML是什么样子的?
$(function () {
  $('#drpList').change(function () {
  .... your functionality
  });
});