【发布时间】:2014-06-19 02:18:54
【问题描述】:
我有一个委托 Jquery 函数,它正在工作,但每次我单击一个字段时,它都会增加委托函数执行的次数。
示例:3 个字段输入,我单击一个,代表会响应,但如果我单击下一个字段或什至同一字段,则该函数将运行两次,3 次运行 3 次等。
Why is this happening and how can i prevent this?
我已经尝试在函数和委托函数这两个部分上使用return false,但这根本没有帮助。
HTML
<div class="input-group marg_5">
<span class="input-group-addon">Article Title</span>
<input id='new_vid_form_title' type="text" class="form-control vid_form" placeholder="Article Title" autocomplete='off'>
<span class="input-group-addon">
<span id="new_vid_form_title_status" class="glyphicon glyphicon-asterisk orange pointer status_box" title="Required field"></span>
</span>
</div>
<div class="input-group marg_5">
<span class="input-group-addon">Short Desc.</span>
<input id="new_vid_form_shortDesc_status" type="text" class="form-control vid_form" placeholder="Short Description" autocomplete='off'>
<span class="input-group-addon">
<span id="new_vid_form_shortDesc_status" class="glyphicon glyphicon-asterisk orange pointer status_box" title="Required field"></span>
</span>
</div>
<hr />
<div class="input-group marg_5">
<span class="input-group-addon">Youtube ID</span>
<input id="new_vid_form_youtubeID_status" type="text" class="form-control vid_form" placeholder="Youtube Video ID | watch?v=' this bit ' " autocomplete='off'>
<span class="input-group-addon">
<span id="new_vid_form_youtubeID_status" class="glyphicon glyphicon-asterisk orange pointer status_box" title="Required field"></span>
</span>
</div>
<hr />
JQuery/JS
function new_vid() {
$("div").delegate("input","click",function(){
$('.vid_form').keyup( function() {
alert('ddd');
});
});
}
【问题讨论】:
-
你不应该在每次点击时都安装一个新的 keyup 处理程序——那是你的问题。
-
我不确定我是否关注?我有一个需要基于keyup操作的功能。我该如何让委托正确地适应这个功能? @jfriend00
-
我不知道你想在你的页面中完成什么,但希望你能理解每次点击事件发生时,你都在安装另一个
.keyup()处理程序,这就是为什么你正在每个键上调用 N 个处理程序,所以显然这段代码是不正确的。我不知道您真正希望点击一下会发生什么。 -
是的,我想我一直在以错误的方式考虑委托。我需要它,因为我正在将带有 ajax 的 div 加载到 DOM 中,并且预先加载了控制它们的脚本。我认为委托是正确的方法,但也许我应该尝试 on() 代替? @jfriend00
-
.on()在这方面的工作方式与.delegate()没有任何不同。那不是你的问题。