0

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

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

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

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

4

2 回答 2

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');
    })
于 2012-05-06T16:39:13.380 回答
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);
    });
};
于 2012-05-06T16:43:34.577 回答