Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅当事件触发时调用函数_Javascript_Jquery - Fatal编程技术网

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:我的错,我猜你是正确的,但我只是在实现解决方案后遇到了这个问题,有什么建议吗?