如何在未直接触发的情况下停止事件
How to stop an event if not triggered directly?
假设存在textbox
和button
。点击按钮时,执行一个功能,在文本框的focusout
上,点击按钮。我想知道的是,有没有一种方法,我可以确定用户clicked
的按钮,或是由textbox
的focusout
事件触发的,这样我就可以在的click
事件中做一些自定义工作,如果它是由文本框的focusout
触发的?
我可以写一些代码,但我甚至不知道从哪里开始,我知道jQuery event
和event.which
属性,但我想知道它/它们在这种情况下是否有用?
您可以使用event.target来确定哪个DOM元素启动了事件,然后您可以检查这是按钮还是文本框。
查看此以了解更多信息:http://api.jquery.com/event.target/
来自文档:
event.target
目标属性可以是为事件注册的元素或其后代。将event.target与这是为了确定事件是否由于事件而被处理起泡。当事件泡沫。
这取决于您如何从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演示。
然而,如果您正在使用类似以下的东西(只是从不同的地方调用相同的函数):
$('#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');
}
}
}
JS Fiddle演示。
您可以使用event.target
。默认情况下,jquery将事件提供给处理程序函数。下面是一个例子:jsfiddle
您可以在触发事件时传递额外的参数,并在事件处理程序中检查它们。
所以如果你写
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.
});
- 如何在未直接触发的情况下停止事件
- 如何在不单击javascript中的按钮的情况下触发事件
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 在没有焦点的情况下捕获画布上的第一次单击事件
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 在什么情况下,Array.observe的“add”事件会触发
- jQuery:如何在没有for循环的情况下将事件处理程序应用于$('#text'+'任意整数
- 在没有事件的情况下使用.jquery.on()
- 如何在没有jQuery的情况下模拟按名称命名的事件或解除单个事件的绑定
- 如何在不干扰网站其他部分的情况下,在画布上捕捉keydown事件
- 在这种情况下使用onclick事件处理程序可以接受吗
- 如何避免在这种情况下修改事件对象
- 如何在不刷新的情况下停止类的事件
- 有没有办法在没有真正的点击事件的情况下使用 onclick
- 如何在不接触某些元素的情况下附加document.click事件
- jquery在不触发更改事件的情况下切换设置状态
- Jquery在不触发事件的情况下部分工作
- 在没有事件的情况下对具有特定类的已加载元素激发函数
- knightlab timeline js-如何在不重叠的情况下显示事件
- 如何在包含事件的情况下使用其他参数