执行javascript事件而不触发该事件处理程序

ben*_*nto 8 javascript events event-handling

在我的最新代码中,我focus在textarea上有一个事件处理程序.当用户单击textarea时,将触发该事件处理程序,该处理程序根据所选的textarea设置一些其他DOM状态.但是,在我的程序的其他地方,我想以编程方式设置focustextarea而不触发该事件处理程序.我知道Backbone有一种silently执行动作的方法.

我唯一的伪解决方案是暂时设置一个变量:

var silence = true;
Run Code Online (Sandbox Code Playgroud)

然后,在我的事件处理程序中,只有在静默为假时才执行逻辑.处理程序仍然被触发,但逻辑不会运行.

还有其他人知道更好的策略吗?

Nel*_*son 5

您可以unbind()像这样临时地进行活动:

在以下情况下,您需要处理焦点事件:

function focus_handler() {
   //focus handler code
   ...
   ...
}

$('#yourelement').bind('focus', focus_handler);
Run Code Online (Sandbox Code Playgroud)

现在,在代码部分中,您希望以编程方式聚焦元素而不触发事件处理程序:

$('#yourelement').unbind('focus');
$('#yourelement').focus();
$('#yourelement').bind('focus', focus_handler);
Run Code Online (Sandbox Code Playgroud)


Ref*_*ive 3

<input type="text" name="input" id="input" value="0">
<input type="text" name="input" id="input2" value="0">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script>
$(function() {

$('#input').focus(function(a,b) {
   if (b) alert('forced');
});

$('#input').trigger('focus', jQuery.Event("focus"));

});
</script>
Run Code Online (Sandbox Code Playgroud)

b事件处理程序的参数存在时,通过调用 来触发事件$('#input').trigger('focus', jQuery.Event("focus"));。因此,您可以使处理程序函数根据正常焦点或强制焦点执行。

  • 没有记录?这是http://api.jquery.com/trigger/中extraParameters的使用。为什么不简单地传递`true`而不是奇怪的`jQuery.Event("focus")`? (4认同)