如何使select .change事件在失去焦点之前不会触发(最好使用jquery)?

时间:2010-02-12 19:33:51

标签: jquery events select

我有一个使用dropdownchecklist jquery插件的选择框。我希望只有在选择框丢失焦点后才会触发更改事件。

在选择列表中的项目后,jquery .change事件会立即触发选择框。在我的情况下,由于可以选择多个项目,我只希望在焦点丢失后触发更改,假设甚至选择了新项目。

我以为我可以做某种链接,比如$('#MySelect')。change()。blur(...)或者某种嵌套或者什么东西,但我真的不能让它像我期待。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

也许你想简单地为blur事件提供一个处理程序并完全忽略change事件。然后,您必须自己跟踪更改。一个建议是让change事件只是更新一个变量,告诉你发生了更改而没有做任何其他事情。然后模糊事件可以这样做:

 $('#yourselect').blur(function(){
     if(changesOccurred){
        //do something about it
        changeOccurred = false;
     }

 });


 $('#yourselect').change(function(){
     changeOccurred = true;
});

答案 1 :(得分:1)

你应该能够做到这一点。

$('select').focus(function() {
    $(this).data( 'startValue', $(this).val() );
}

$('select').change(function(event) {
    event.preventDefault();
});

$('select').blur(function() {
    if ( $(this).data('startValue') == $(this).val() ) {
        //nothing has changed
    } else {
        //something's different
    }
}

答案 2 :(得分:0)

下拉列表更改时会触发change事件。你不能改变它(在这种背景下这是一个有趣的句子) 您必须设置代码,以便通常在change上执行的所有功能都在blur事件上执行。

更新:如果您提供了一些代码和解释,应该在什么时候执行,这将更容易为您提供帮助。