我已经定义了以下脚本,以便在用户开始输入任何输入字段文本字段时启用“提交”按钮: -
<script type = "text/javascript">
$("input[type= 'text']").change(function () {
var $this = $("input[type='submit']");
$this.prop('disabled', false);
});
</script>
但是我可以强制上面的脚本只触发一次,因为每次用户在文本字段中输入时都会浪费处理来启用提交按钮,其中提交按钮将在第一次启用后启用.change
。
BR
答案 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);
});
};