我尝试创建一个多选列表,并在选择更改时执行一些操作。我在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实现这一点?
由于
答案 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)
如果您没有找到更清洁的解决方案,请执行以下操作:
~~~~~~~~~~~~~~~追加~~~~~~~~~~~~~~~
在思考为什么这个问题出现之后,为什么IE表现出它的行为的唯一原因是,在一个小隔间的某个大楼里有一个编码器,在编写事件处理程序时IE中的代码,写了一些类似的代码:
Selection = HookedSelect.FirstSelectedElement;
If (Selection != LastSelection)
{
LastSelection = Selection;
Raise Event Change(Selection);
}