繁体   English   中英

如何强制Jquery函数仅对选择器触发一次

[英]how to force the a Jquery function to fire only one time for the selector

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

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

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

但我可以强制上述脚本仅触发一次,因为每次用户在文本字段中键入(在第一个.change之后便已启用提交按钮)来启用提交按钮将浪费处理时间。 BR

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

$('<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);
    });
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM