0

可以说有 atextbox和 a button。在单击按钮时执行功能,在focusout文本框上单击按钮。我想知道的是,有没有办法,我可以确定用户clicked按钮的天气,或者它是由focusout事件触发的textbox,这样我可以click事件中做一些自定义工作,如果是由文本框触发focusout的?

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

4

4 回答 4

2

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

查看更多信息:http ://api.jquery.com/event.target/

从文档:

event.target

目标属性可以是为事件注册的元素或它的后代。将 event.target 与 this 进行比较通常很有用,以确定是否由于事件冒泡而正在处理事件。当事件冒泡时,此属性在事件委托中非常有用。

于 2012-09-15T15:03:31.310 回答
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 小提琴演示

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

$('#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 小提琴演示

于 2012-09-15T15:13:38.027 回答
0

您可以在触发事件时传递附加参数并在事件处理程序中检查它们。

所以如果你写

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.
});
于 2012-09-15T15:25:30.747 回答
0

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

于 2012-09-15T15:11:15.363 回答