当选择了更多选项</select>时,jQuery更改事件不会在多个<select>上的IE8中触发

时间:2011-12-23 20:02:32

标签: jquery asp.net-mvc

我尝试创建一个多选列表,并在选择更改时执行一些操作。我在ASP.NET MVC视图中有以下代码(Model.AvailableChoices是IEnumerable):

@Html.ListBoxFor(
m => m.Value,
Model.AvailableChoices.Select(s => new SelectListItem() {Text = s, Value = s,})
, new {@class = "StringChoiceMetadataFieldViewModel"}
)

它生成以下html:

<SELECT id="MetadataFields_10__Value" name="MetadataFields[10].Value" multiple="multiple" >
  <OPTION value="Wakka">Wakka</OPTION>
  <OPTION value="Splat">Splat</OPTION>
  <OPTION value="Bang">Bang</OPTION>
</SELECT>

我通过jQuery(v1.6.4)绑定到change事件:

$('#someDivAboveTheSelect select').change(function () {
alert('change event');
}); 

当我按住Ctrl并单击以更改选择时,更改事件处理程序没有被命中,除非我这样做 导致列表中 first 选择发生变化的内容。因此,如果我选择Wakka然后按住Ctrl键并点击Splat我就不会得到这个事件。但是,如果我选择Splat然后按住Ctrl键并单击Wakka,我会这样做。

正常点击更改工作正常。在Chrome和Firefox中一切正常。

有人知道这里发生了什么吗?我怀疑这可能是需要在选择选项上使用ID的东西......如果是这样的话,我如何使用MVC实现这一点?

由于

2 个答案:

答案 0 :(得分:2)

我想知道这是否会有所帮助:

$('#someDivAboveTheSelect select').change(function () {
    alert('change event');
});

// blah blah use feature detection instead
// in reality, sometimes browser hacks are needed
// not quite sure about this case, though
if($.browser.msie && parseInt($.browser.version, 10) === 8) {
    $('#someDivAboveTheSelect select').click(function () {
        $(this).trigger("change");
    });
}

答案 1 :(得分:0)

哇,这真的是一个问题...

如果您没有找到更清洁的解决方案,请执行以下操作:

  1. 使用.click事件代替.change并将最后一个选项与当前选项进行比较以模拟“更改”功能
  2. 向Microsoft&amp;提交错误报告要求他们修复IE
  3. ~~~~~~~~~~~~~~~追加~~~~~~~~~~~~~~~

    在思考为什么这个问题出现之后,为什么IE表现出它的行为的唯一原因是,在一个小隔间的某个大楼里有一个编码器,在编写事件处理程序时IE中的代码,写了一些类似的代码:

    Selection = HookedSelect.FirstSelectedElement;
    If (Selection != LastSelection)
    {
        LastSelection = Selection;
        Raise Event Change(Selection);
    }