可以说有 atextbox
和 a button
。在单击按钮时执行功能,在focusout
文本框上单击按钮。我想知道的是,有没有办法,我可以确定用户clicked
按钮的天气,或者它是由focusout
事件触发的textbox
,这样我可以在click
事件中做一些自定义工作,如果它是由文本框触发focusout
的?
我可以写一些代码,但我什至不知道从哪里开始,我知道 jqueryevent
和event.which
属性,但我想知道它/它们在这种情况下是否有用?
可以说有 atextbox
和 a button
。在单击按钮时执行功能,在focusout
文本框上单击按钮。我想知道的是,有没有办法,我可以确定用户clicked
按钮的天气,或者它是由focusout
事件触发的textbox
,这样我可以在click
事件中做一些自定义工作,如果它是由文本框触发focusout
的?
我可以写一些代码,但我什至不知道从哪里开始,我知道 jqueryevent
和event.which
属性,但我想知道它/它们在这种情况下是否有用?
您可以使用 event.target 来确定哪个 DOM 元素发起了事件,然后您可以检查这是按钮还是文本框。
查看更多信息:http ://api.jquery.com/event.target/
从文档:
event.target
目标属性可以是为事件注册的元素或它的后代。将 event.target 与 this 进行比较通常很有用,以确定是否由于事件冒泡而正在处理事件。当事件冒泡时,此属性在事件委托中非常有用。
这取决于您如何从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');
}
}
}
但是,如果您使用的是以下内容(只需从不同的地方调用相同的函数):
$('#btn').click(
function(e){
buttonActivation(e);
});
$('#txt').blur(
function(e){
buttonActivation(e);
});
然后我建议直接评估e.target
或e.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');
}
}
}
您可以在触发事件时传递附加参数并在事件处理程序中检查它们。
所以如果你写
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.
});
您可以使用event.target
. 默认情况下,jquery 将事件提供给处理函数。这是一个例子:jsfiddle