修改
感谢Puneet创造了这个小提琴:http://jsfiddle.net/G3vSK/
它似乎无法在Chrome版本28上运行
在Firefox(第22版)上,警报出现一次,但您无法在方框中输入任何内容
我无法解决的另一个问题: 这是我的Javsacript-Code:
function updateFieldsetStyleAdjustment(){
alert("update");
$('fieldset').not('[data-style=\'none\']').find('input, select, textarea, button') //find input-fields
.focus(function(){
alert("active: "+$(this).attr('id'));
});
}
此函数应将onfocus-Handler添加到我网站上的某些输入字段。 每当我聚焦一个字段来插入一个值时,都应该调用它。
我的问题是,当我对输入字段进行聚焦时,会多次调用该函数。每个焦点事件的呼叫/警报数量从3到16或更多不等。
然而,我的领域永远不会失去焦点。
我应用onfocus-event 2次(“update”-alert出现两次),但这是正常的。 (我没有在输入字段中添加16个onfocus事件监听器。)
任何人都知道我做错了什么?
修改
这是HTML-snipped:
<fieldset id="fs_1" data-style="data" d class="">
<legend>General Information</legend>
<div class="lineWrapper inputTooltip" data-tooltippos="left">
<label for="fs_1_form51f37d255fb35_name">Name</label>
<span class="inputWrapper">
<input type="text" id="fs_1_form51f37d255fb35_name" name="name" autofocus="" maxlength="40" tabindex="50">
</span>
</div>
<div class="lineWrapper inputTooltip" data-tooltippos="left">
<label for="fs_1_form51f37d255fb35_ansprechperson">Ansprechperson</label>
<span class="inputWrapper">
<input type="text" id="fs_1_form51f37d255fb35_ansprechperson" name="ansprechperson" maxlength="40" tabindex="51">
</span>
</div>
<!-- ...more Wrappers with input-fields... -->
</fieldset>
<!-- ...more fieldsets... -->
我如何称呼它:
1。)$(document).ready(function(){updateFieldsetStyleAdjustment();});
2.。)在每个Ajax-Request之后我再次调用它(输入字段通过Ajax加载)
解除绑定:
当我将$(this).unbind('focus');
置于我的焦点事件处理程序中时,它只被触发一次。但是当我再次聚焦同一个领域时,它不再起作用(正如预期的那样)。
当我将$('*').unbind('focus');
放在updateFieldsetStyleAdjustment()
- 函数的开头时,它不会改变任何内容。
答案 0 :(得分:1)
警报()是错误。 意识到没有alert(),一切都工作正常。事件也只触发一次。
警报始终未对输入字段进行聚焦,因此创建了新警报。
我讨厌它,因为我的调试代码是程序中唯一的错误。
答案 1 :(得分:0)
我认为你的问题就在这里。 在每次Ajax-Request之后我再次调用它(输入字段通过Ajax加载)。
尝试仅使用ajax调用后生成的新focus
绑定fieldset
(尝试使用jQuery.on()函数)。或者尝试
$('fieldset').not('[data-style=\'none\']').find('input, select, textarea, button').unbind('focus');
//unbind focus from previously binded dom elements.
然后致电
updateFieldsetStyleAdjustment