jquery .focus(func)多次执行进程

时间:2013-07-27 07:53:00

标签: javascript jquery events

修改

感谢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() - 函数的开头时,它不会改变任何内容。

2 个答案:

答案 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