假设有一个textbox
和一个button
。在单击按钮时,将执行一项功能,并在文本框的focusout
上单击该按钮。我想知道的是,有没有办法,我可以确定用户clicked
按钮的日期,或是由focusout
事件textbox
触发的,以便我可以在 click
事件中进行自定义工作,如果是由focusout
文本框触发的?
我可以写一些代码,但我甚至不知道从哪里开始,我知道jquery event
和event.which
属性,但我想知道它/它们是否有用在这种情况下?
答案 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');
}
}
}
但是,如果您正在使用以下内容(只是从不同的地方调用相同的函数):
$('#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');
}
}
}
答案 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.
});