jQuery - 确定用户与程序化事件

时间:2011-09-01 20:00:35

标签: jquery

我有<select>并处理change()事件。当用户更改选择选项时,我想执行一系列操作。但是,如果我通过$(item).trigger('change')触发更改,那么我不想执行上述一系列操作。

我看到trigger() contains带参数的重载。我不确定这是否会起作用,因为我没有写自定义事件。那么,我该怎么做才能确定用户触发的事件与我的程序化触发事件之间的区别?

2 个答案:

答案 0 :(得分:3)

您无法正常执行此操作,但是,您可以通过从程序调用中传递一个标记来伪造它。

$('.selector').bind('click', function(event,data) {
    if(typeof(data.programmatic) === 'undefined') {
        //Do user stuff here
    } else {
        //Do progammatic stuff here
    }
});

//Call programmitcally
$('.selector').trigger('click',{programmatic:true});

答案 1 :(得分:1)

这是一种快速而肮脏的方法:

var progChange = false;

$('select').change(function() {
    if (!progChange) {
        // Do user actions...            
    }
    progChange = false;
});

function callSelectChange() {
    progChange = true;
    $('select').change();
}

你可以用trigger方法以基本相同的方式完成它,它会消除全局,这是一件好事:

$('select').change(function(event, progChange) {
    if (!progChange) {
        // Do user actions...
    }
});

$('select').trigger('change', [true]);

工作示例:http://jsfiddle.net/FishBasketGordo/XsPc5/