Javascript 为什么jQuery代码在Chrome和Firefox中运行良好,但在IE9中却不行?

Javascript 为什么jQuery代码在Chrome和Firefox中运行良好,但在IE9中却不行?,javascript,jquery,asp.net-mvc-3,razor,Javascript,Jquery,Asp.net Mvc 3,Razor,如果我去掉>选项,它会工作,但显然这不会产生 预期效果。我已经尝试了$('.ProductsInCatList option')和$('.ProductsInCatList')。查找('option')无效。哪一种都可以 在Firefox和Chrome中。我只想在选择该选项时执行代码 从多选列表中。使用jquery1.6.4更新:好的,显然IE9不适用于option元素的点击事件,这里我认为我已经取消了这个按钮控件 $('.ProductsInCatList') .delega

如果我去掉
>选项
,它会工作,但显然这不会产生 预期效果。我已经尝试了
$('.ProductsInCatList option')
$('.ProductsInCatList')。查找('option')
无效。哪一种都可以 在Firefox和Chrome中。我只想在选择该选项时执行代码 从多选列表中。使用jquery1.6.4更新:好的,显然IE9不适用于option元素的点击事件,这里我认为我已经取消了这个按钮控件

 $('.ProductsInCatList')
        .delegate("option","click", function () {}); //<-- Also does not work
HTML


加工机
英特尔第二代Core i7 2600插槽1155处理器
英特尔第二代Core i5 2500插槽1155处理器
英特尔酷睿i7-2700
英特尔酷睿i5-2400
i3-2100T
英特尔Core i7 950插槽1366处理器
英特尔Core i7 930 Socket 1366处理器
英特尔至强X5690
英特尔至强X5870

我总是发现.live()有很多bug-与scope相关的各种奇怪bug

提供。ProductsInCatList在页面加载时显示以下内容是等效的,并且根据我的经验更可靠

$('.ProductsInCatList').delegate("option", "click", function () {
   //
});
我总是发现.live()有很多bug-有各种各样与scope相关的奇怪bug

提供。ProductsInCatList在页面加载时显示以下内容是等效的,并且根据我的经验更可靠

$('.ProductsInCatList').delegate("option", "click", function () {
   //
});

另一种方法是重构代码。 你把范围缩小到了选择器-那么像这样的东西怎么样:

$('option.ProductsInCatListOption').live('click', function () {
    var option = $(this).clone();

    alert('works');

    var slist = $(this).parent().prev('.SelectedList');
    option.appendTo(slist);
    $(this).detach();
});
HTML:


另一种方法是重构代码。 你把范围缩小到了选择器-那么像这样的东西怎么样:

$('option.ProductsInCatListOption').live('click', function () {
    var option = $(this).clone();

    alert('works');

    var slist = $(this).parent().prev('.SelectedList');
    option.appendTo(slist);
    $(this).detach();
});
HTML:

选项的所有事件,包括单击事件

最好的方法可能是使用
onchange
选择:

$('body').delegate(".ProductsInCatList", "change", function () {
    var option = $(this).find(":selected")
    ...
});
唯一的区别是,只有当用户更改所选选项时,才会触发它。

选项的所有事件,包括单击事件

最好的方法可能是使用
onchange
选择:

$('body').delegate(".ProductsInCatList", "change", function () {
    var option = $(this).find(":selected")
    ...
});


唯一的区别是,只有当用户更改所选选项时才会触发。

您是否也可以发布HTML,以便我们可以看到哪些类名与哪些元素相关。应该注意的是,
live
已被弃用,因为
JQuery 1.4
,这几天我们在
JQuery 1.7.1
上……您是否在没有空格的情况下尝试过:'.ProductsInCatList>option'?@BiAiB。它应该是有空间的@格多龙:从技术上讲,它是在1.7年折旧的;从jQuery1.7开始,不推荐使用.live()方法。Use.on()…您是否也可以发布您的HTML,这样我们就可以看到哪些类名与哪些元素相关。应该注意的是,
live
是不推荐的,因为
JQuery 1.4
,我们这几天在
JQuery 1.7.1
上……您是否尝试过没有空格的方式:'.ProductsInCatList>option'?@BiAiB。它应该是有空间的@格多龙:从技术上讲,它是在1.7年折旧的;从jQuery1.7开始,不推荐使用.live()方法。Use.on()…我的选项列表是自动生成的,我使用的是MVC帮助程序(ASP.NET)。我不相信我可以在选项元素上设置类。我想你可以用jQuery来实现这一点,否则,你可以在所有选项元素上执行事件并测试父元素。有点像散弹枪,但考虑到这些限制,我看不到其他方法。我的选项列表是自动生成的,我使用的是MVC帮助程序(ASP.NET),我不相信我可以在选项元素上设置类。我想你可以用jQuery来做,否则,你可以在所有选项元素上做一个事件,并测试父元素。有点像猎枪,但考虑到这些限制,我看不到另一种方法。我还没意识到IE9还是由failDang组成的!看来没有实际的办法。此外,我使用的是多选,而不仅仅是下拉选择列表;(然后只有“选择”下的一个按钮,或者如果您确实需要它,请每隔1秒检查此“选择”中的选定选项并更新另一个。@meze更改Jquery版本也不会有任何效果,对吗?因此这基本上是一个IE9错误。@LaserBeak认为没有帮助。Jquery只是javascript事件的包装器,IE没有选项eleme的事件不管怎么说,你的点击解决方案不是很好,我不能一次点击选择多个项目(我的意思是按住鼠标)。很好,先生。我还没意识到IE9还是由failDang组成的!看起来没有实际的方法。而且我使用的是多选而不仅仅是下拉选择列表。没有注意到;(然后只有“选择”下的一个按钮,或者如果您确实需要它,请每隔1秒检查此“选择”中的选定选项并更新另一个。@meze更改Jquery版本也不会有任何效果,对吗?因此这基本上是一个IE9错误。@LaserBeak认为没有帮助。Jquery只是javascript事件的包装器,IE没有选项eleme的事件不管怎样,你的点击解决方案不是很好,我不能一次点击选择多个项目(我的意思是按住鼠标)。
$('body').delegate(".ProductsInCatList", "change", function () {
    var option = $(this).find(":selected")
    ...
});