我在绑定jquery事件时有一个问题。
我有一个下拉列表,出于兴趣,我使用选择的插件。这一直在我的网页上使用。
以下示例:
<select name="Title" class="form-control chosen-select" id="Title" style="display: none;"><option value=""></option>
<option value="TMR">Mr</option>
<option value="TMRS">Mrs</option>
<option value="TDR">Dr</option>
<option value="TMS">Miss</option>
</select>
注意这个类包含了chosen-select和id=Title
下一位是由chosen生成的可见html(我认为这对问题来说是不必要的,但解释了显示:上面没有,为了完整性,我包括了)
<div title="" class="chosen-container chosen-container-single" id="Title_chosen" style="width: 100%;"><a tabindex="-1" class="chosen-single"><span>Mrs</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off"></div><ul class="chosen-results"><li class="active-result" data-option-array-index="1">Mr</li><li class="active-result result-selected" data-option-array-index="2">Mrs</li><li class="active-result" data-option-array-index="3">Dr</li><li class="active-result" data-option-array-index="4">Miss</li></ul></div></div>
现在我有了下面的"apply to all"代码
$('.chosen-select').off('change').on('change', function () {
alert('In chosen');
});
我总是希望这个事件在任何下拉列表被改变时触发。
现在我有一个特定的下拉列表,我想让一个特定的函数出现在页面上,但我也想让上面的内容被触发。我将它绑定到id
$('#Title').off('change').on('change', function () {
alert('title');
});
在这种情况下,只有#Title上的事件触发。
我想到的一个解决方案是将"catch-all"代码放入函数中,并简单地在事件处理程序和#Title处理程序中调用该函数。
是否有更好或被接受的方法来做这件事?或者我的方法总体上可以改进吗?
顺便说一下,这个项目是用MVC模式开发的,使用c#和Razor语法。
任何帮助或指导将不胜感激
不需要像前面那样去解释使用.off()的原因,解决方案是使用像
这样的命名空间的事件$('.chosen-select').off('change.common').on('change.common', function () {
alert('In chosen');
});
$('#Title').off('change.title').on('change.title', function () {
alert('title');
});