如何才能捕获仅在<select>的值通过用户输入更改时发生的事件?</select>

时间:2012-09-24 11:50:21

标签: jquery

我有一个正常选择列表的代码:

   $('.update-title')
        .change(function () {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);
        });

当填充select时,似乎会触发此操作。只有当用户进入并手动重新选择其他值时,我才能实现这一点吗?

5 个答案:

答案 0 :(得分:1)

您可以使用布尔值来确定是否第一次触发事件。例如,您的代码可以是这样的......

var first_time_select = true;
$('.update-title')
    .change(function () {
        if (first_time_select) {
            first_time_select = false;
        } else {
            var title = $('option:selected', this).prop('title');
            $("#modal_Title").val(title);
        }
});

答案 1 :(得分:0)

除语法错误外,您的代码完全正确。删除语法错误

工作 demo

$('.update-title')
        .change(function () {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);//you are missing quotes
        });

答案 2 :(得分:0)

不是这样,但是当您以编程方式更改数据时,始终可以将数据分配给选择框。然后你会检查它是否已经改变:

$('#mybutton').on('click', function() {
    $('.update-title').data('dont-change', 1);
    // repopulate the dropdown here...
});

$('.update-title')
    .change(function () {
        if (!$(this).data('dont-change')) {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);//you are missing quotes
        } else {
            $(this).removeData('dont-change');
        }
    });

答案 3 :(得分:0)

我不确定为什么当你用数据填充它时,你的选择的更改事件会被触发(我已经注意到这样的事情发生在Knockout上)。但是,如果您想避免它被触发,为什么不在更改元素时对元素使用.off()link),然后.on(callback)再次激活它? (我建议使用命名函数而不是内联函数来执行此操作。)

这是一个人为的例子:http://jsfiddle.net/b2x2T/11/

请注意,在该示例中,我实际上不需要使用on / off,因为它不会触发change事件,但我认为你明白这一点。

编辑:出于好奇,您何时以及如何填充选择列表?

答案 4 :(得分:-1)

change事件仅在元素获得焦点,值发生变化且元素失去焦点时由浏览器触发。最初填充元素时不会发生这种情况,并且在最初填充change时,我从未遇到过触发的<select>事件。

似乎你在某个地方有一些代码触发该元素上的change事件处理程序,因为你所描述的不是标准行为。