Javascript 仅当事件触发时调用函数
我有以下功能:Javascript 仅当事件触发时调用函数,javascript,jquery,Javascript,Jquery,我有以下功能: format : function(){ //function body if(condition){ //execute this condition only on focus event } } 在页面加载和输入元素的焦点上调用此函数。此函数中有一个条件,即仅当此函数是从焦点事件手动调用的,而不是在页面加载时,我才希望被调用。有没有办法做到这一点 有时,在页面加载时if语句中的“条件”也为true。任何帮助都将不胜感激。提前感谢。分为两个
format : function(){
//function body
if(condition){
//execute this condition only on focus event
}
}
在页面加载和输入元素的焦点上调用此函数。此函数中有一个条件,即仅当此函数是从焦点事件手动调用的,而不是在页面加载时,我才希望被调用。有没有办法做到这一点
有时,在页面加载时if语句中的“条件”也为true。任何帮助都将不胜感激。提前感谢。分为两个功能:
format: function() {
//Do stuff for focus
}
onload: function() {
//Do stuff for onload
this.format();
}
您只需检查是否存在
事件
参数:
format: function(event) {
if (event) {
// called form an event
} else {
// called manually (without a parameter)
}
}
为进一步增强健壮性,请检查
事件。键入参数-它将包含触发的事件的名称。在焦点上手动调用时,您可以将其作为参数,并检查是否有参数,如特殊关键字“arguments”,当您在页面加载时不带参数调用它时,那么长度将为零,否则它将不为零,所以该条件仅适用于焦点功能
format : function(){
if(arguments.length){
//execute this condition only on focus event
}
}
您可以使用例如this===document.activeElement
或$(this).is(':focus')
检查元素是否具有焦点。如果通过焦点事件触发函数,则返回true
;如果从onload事件调用函数,则返回false
我希望这对你有帮助 只需使用事件参数
format : function(e){
//function body
if(e && e.type == 'focus'){
//execute this condition only on focus event
}
}
演示:刚刚想到分享:
这就是提供给我的解决方案对我起作用的原因,谢谢:
format : function(e){
//function body
if(e && e.type == 'focus'){
//execute this condition only on focus event
}
}
仅供参考,我们不需要显式地传递事件参数,它可以如此简单:
format : function(){
//function body
if(e && e.type == 'focus'){
//execute this condition only on focus event
}
}
默认情况下,e将引用导致它的事件。感谢所有的投入 任何焦点事件,或特定元素的焦点事件?我在页面上有四个输入元素,函数的设置使我可以访问那里的元素,基本上我在那里传递元素引用。我建议创建一个抽象函数,并根据需要将其附加到焦点事件(DOM事件)上,OP示例代码中的冒号表示它是一个对象如果正确调用函数,此
将正常工作。另外,这只是一个例子,没有对象的情况下,这会很好地工作。如果您正确调用函数,这是一个我在这里见过几十次的问题。如果它只是作为一个引用传递,它将不起作用。不确定重新发布另一个已发布的答案的目的是什么。顺便说一句,e
在第二个示例中未定义,您是否将其与事件混为一谈?无论如何,应该始终为跨浏览器支持定义event | | e
,如果事件处理程序是使用jQuery注册的,那么event
参数就保证被传递。因此,这就是我面临的问题。该函数有2个参数-元素p,其中p是可选参数。如果我使用第二种方式,它在chrome和IE中运行良好,但在firefox中,它会给我一个错误,说事件未定义,有什么建议吗?或者我如何将事件引用传递给函数本身?@jp310也许您应该在问题中包含该细节?如前所述,这些参数不应该在事件处理情况下工作。@Alnitak:我的错,我猜你是正确的,但我只是在实现解决方案后遇到了这个问题,有什么建议吗?