4

当再次选择已选择的选项时,我试图触发一个事件。我尝试了不同的点击和触发功能,但没有。请帮忙。

HTML:

<select id="mySelect" name="mySelect">
    <option class="mylistitem" value="0" selected="selected">Option 0</option>
    <option class="mylistitem" value="1">Option 1</option>
    <option class="mylistitem" value="2">Option 2</option>
</select>​

JS:

$("#mySelect").live("change", function () {
    alert($("#mySelect").val());
});

http://jsfiddle.net/pioSko/tcWRP/38/

更新:结合两个答案;)http://jsfiddle.net/pioSko/tcWRP/60/

$(document).delegate('#mySelect-menu li', 'vmousedown', function (event) {
    if ($(this).attr('aria-selected') === 'true') {
        $('#mySelect').trigger('change');
    }
});
4

2 回答 2

2

如果您使用本机选择菜单,那么您很快就会遇到问题。但是,如果您使用 jQuery Mobile 样式的选择菜单,那么您可以将事件处理程序绑定到菜单小部件,因为它是由 DIV 和 SPAN 组成的。

$(document).delegate('#mySelect-menu li', 'vmousedown', function (event) {
    if ($(this).attr('aria-selected') === 'true') {
        alert('That is already selected.');
    }
});​

这是一个演示:http: //jsfiddle.net/ys8Kh/

基本思想是在自定义选择菜单中跟踪对“选项”元素(实际上是列表项)的点击,并检查area-selected属性以查看该元素是否已被选中。该值由 jQuery Mobile 自动更新。

请注意,这#mySelect-menu是作为 jQuery Mobile 选择菜单的自定义选择菜单界面创建的 UL 元素。另请注意,这vmousedown是一个自定义 jQuery Mobile 事件,有助于处理鼠标和触摸事件。我之所以选择vmousedown是因为它会在 select 的值发生变化之前触发,所以我们可以查看clicked 元素是否已经被选中。

此外,要强制非本地选择小部件,请将此属性添加到 SELECT 标记:data-native-menu="false".

于 2012-04-24T16:14:08.090 回答
2

我通常做的是调用$("#mySelect").trigger('change')它将调用您的代码,就好像用户将其更改为当前值一样

于 2012-04-24T16:20:08.777 回答