jquery如果不直接触发如何停止事件?

时间:2012-09-15 14:57:00

标签: javascript jquery events javascript-events

假设有一个textbox和一个button。在单击按钮时,将执行一项功能,并在文本框的focusout上单击该按钮。我想知道的是,有没有办法,我可以确定用户clicked按钮的日期,是由focusout事件textbox触发的,以便我可以在 click事件中进行自定义工作,如果是由focusout文本框触发的?

我可以写一些代码,但我甚至不知道从哪里开始,我知道jquery eventevent.which属性,但我想知道它/它们是否有用在这种情况下?

4 个答案:

答案 0 :(得分:2)

您可以使用event.target来确定哪个DOM元素已启动该事件,然后您可以检查这是该按钮还是文本框。

查看此信息以获取更多信息:http://api.jquery.com/event.target/

来自文献:

event.target
     

target属性可以是为事件注册的元素   或其后代。将event.target与之比较通常很有用   这是为了确定事件是否由于事件而被处理   冒泡。这个属性在事件委托时非常有用   事件泡沫。

答案 1 :(得分:0)

您可以使用event.target。默认情况下,jquery将事件提供给处理函数。     这是一个例子:jsfiddle

答案 2 :(得分:0)

如果您只是使用以下方法触发textarea事件,则取决于您从blur click事件触发该功能的方式:

$('#btn').click(
    function(e){
        buttonActivation(e);
    });

$('#txt').blur(
    function(e){
        $('#btn').click();
    });

然后我建议评估originalEvent对象以查看原始事件是什么(如果没有originalEvent则函数由编程click事件调用,使用jQuery ;如果originalEvent.type评估为click,则必须单击该按钮。

function buttonActivation(e) {
    if (!e) {
        return false;
    }
    else {
        var oEvent = e.originalEvent;
        if (oEvent === undefined) {
            console.log('Programmatic event');
        }
        else if (oEvent.type == 'click') {
            console.log('User-initiated event');
        }
    }
}

JS Fiddle demo

但是,如果您正在使用以下内容(只是从不同的地方调用相同的函数):

$('#btn').click(
    function(e){
        buttonActivation(e);
    });

$('#txt').blur(
    function(e){
        buttonActivation(e);
    });

然后我建议您直接评估e.targete.type

function buttonActivation(e) {
    if (!e) {
        return false;
    }
    else {
        var oEvent = e.type;
        if (oEvent === 'blur') {
            console.log('Programmatically-triggered event, on ' + oEvent);
        }
        else if (oEvent == 'click') {
            console.log('User-initiated ' + oEvent + ' event');
        }
    }
}

JS Fiddle demo

答案 3 :(得分:0)

触发事件时可以pass an additional parameters并在事件处理程序中检查它们。

所以,如果你写了

button$.trigger('click', 'hello');

然后你可以编写像

这样的处理程序
button$.on('click', function(e, someStr) {
    console.log(someStr || 'Nothing passed');
    // Obviously if someStr is undefined, the user clicked the button,
    // otherwise the $.trigger() method has been called.
});