如何强制Jquery函数只为选择器触发一次

时间:2012-05-06 16:35:39

标签: jquery

我已经定义了以下脚本,以便在用户开始输入任何输入字段文本字段时启用“提交”按钮: -

<script type = "text/javascript">
    $("input[type= 'text']").change(function () {

        var $this = $("input[type='submit']");
        $this.prop('disabled', false);
    });
</script>

但是我可以强制上面的脚本只触发一次,因为每次用户在文本字段中输入时都会浪费处理来启用提交按钮,其中提交按钮将在第一次启用后启用.change。 BR

2 个答案:

答案 0 :(得分:3)

$("input[type='text']").one('change', function () { // fires only one time
        var $this = $("input[type='submit']");
        $this.prop('disabled', false);
        $("input[type='text']").off('change');
    })

答案 1 :(得分:3)

$('<selector>').change(...)会将事件处理程序绑定到每个元素,因此只需使用.one [docs]就无法帮助您。它仍将为每个元素执行一次,尽管您只想执行一次,而忽略它被触发的元素。

在执行一次后,您可以unbind(或off来自每个元素的事件处理程序:

var $elements = $("input[type= 'text']");
$("input[type= 'text']").change(function() {
    //...
    $elements.unbind('change');
});

这很容易变成一个插件(简单版本,原始.one()方法的签名有点复杂):

$.fn.one_all = function(event, handler) {
    var $elements = this;
    $elements.on(event, function() {
        $elements.off(event, handler);
        handler.apply(this, arguments);
    });
};