如果通过选择框的更改事件选择了“选择”或“取消选择”选项,则选择此选项

时间:2013-12-26 15:12:01

标签: javascript jquery html html5 dom

我有一个html多选选择框。当我选择/取消选择更改事件中的值时会触发它。

从事件中了解事件的最佳方式是因为选择或取消选择了某个元素?我不想要它的价值,只是改变事件是因为'选择'还是'取消选择'。

1 个答案:

答案 0 :(得分:0)

在这里做一些假设,你有一个多选,你只需要知道是否有选择。

然后,您只需要使用缓存值检查所选选项的长度。

请看这个小提琴: http://jsfiddle.net/2uudx/1/

不是最优雅或最优化的方式,而是方向。

var sel = 0;
$('#mySelect').on("change", function() {
    var newsel = $(this).find(":selected").length;
    if (newsel > sel) {
        // selected
    } else {
        if (newsel < sel) {
            // de-selected
        } else {
            // no-change
        }
    }
    sel = newsel;
});

如果确实需要比较选择或取消选择的值,则不是缓存长度,而是将所选值缓存在数组中。在更改上,将当前选定的值与缓存的数组进行比较。

希望能给出合适的指针。

<强>更新

使用值进行更准确的比较,如上所述,通过数组。

以下是一个示例小提琴: http://jsfiddle.net/u9XE4/3/

var sel = [];
$('#s1').on("change", function() {
    var newsel = $(this).val();
    var same = compareArray(newsel, sel);
    if (same) {
        // no-change
    } else {
        if ((!same) && ((newsel.length == sel.length) || (newsel.length < sel.length))) {
            // de-selected
        } else {
            // selected
        }
    }
    sel = newsel;
});

function compareArray(a, b) {
    $.each( a, function( key, value ) {
        var index = $.inArray( value, b );
        if( index != -1 ) {
            return true;
        }
    });
    return false;
}
希望有所帮助。