1

我只想在元素输入中的焦点处触发一次功能。以下代码在无限循环中调用该函数。

<input type="text" class="dateRangeEducLev">
$(document).on("focusin",".dateRangeEducLev",function(e){    
    alert("focusIn");
});

我可以将事件更改为“onClick”,但每次用户单击输入元素时它都会调用该函数,即使该输入元素已被选中也是如此。这是不可取的。

我试图解决这个防止传播的问题,但它不起作用。这是代码:

$(document).on("focusin",".dateRangeEducLev",function(e){    
    alert("focusIn");
    e.stopPropagation();
});

http://jsfiddle.net/r1b06udo/1/

关于如何停止传播或限制函数只被调用一次的任何想法?

更新:如果我使用 off() 或 one() 将永远停止调用该函数,直到浏览器刷新。另一个问题是,如果我有多个具有相同类的元素,则将为它们禁用该功能。

http://jsfiddle.net/r1b06udo/2/

我有一个新的更新。我选择解除绑定和绑定。如果您看到它将适用于第一轮。但是,如果您仍然专注,他们将无能为力,但如果您仍然专注,它会工作一段时间。

http://jsfiddle.net/456at7y8/

4

2 回答 2

1

您可以调用off您的 focusin 处理程序以禁止再次调用此处理程序

$(document).on("focusin",".dateRangeEducLev",function(e){    
    alert("focusIn");
    $(document).off("focusin",".dateRangeEducLev");
});

one正如其他人指出的那样,呼叫是另一种选择。问题是我不知道您可以将它与委托事件一起使用,就像您使用on. 这就是我建议这种方法的原因。

根据您所展示的内容,委派活动似乎是不必要的,无论如何我都试图保留它以防万一。

于 2014-12-23T02:46:19.450 回答
1

使用 one() 绑定事件

$(".demo1").on("focusin",function(e){    
    alert("focusIn");
    $( this).unbind( "focusin" );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="dateRangeEducLev demo1"/>
    
<input type="text" class="dateRangeEducLev demo1"/>
<input type="text" class="dateRangeEducLev demo1"/>

于 2014-12-23T02:47:07.970 回答