jQuery:在输入字段中输入文本时,不启用该按钮
jQuery: When entering text in input field, doesn't enable the button
我这里有一个jsfiddle。
jQuery
$(function() {
//var input = $('form :input[type="text"]')
$('form :input[type="text"]').live('keyup', function() {
$('form .create-playlist-button')
.attr('disabled', $('form :input[type="text"]').val().length == 0);
});
});
需要
当我开始在文本框中输入数据时,应该启用创建。
当我从文本框中删除所有文本时,应禁用创建。
我对jQuery很陌生,这个东西对我不起作用。
$('form :input[type="text"]').live('keyup', function() {
var val = $.trim(this.value); // this.value is faster than $(this).val()
$('form .create-playlist-button').prop('disabled', val.length == 0);
});
演示
在这里,我用.prop()
而不是.attr()
,根据jQuery文档.prop()
应该使用。我还使用 .trim()
从值的开头和结尾删除空格。
关于您的代码
在代码中,您使用了两次$('form :input[type="text"]')
,一次用于绑定事件,一次用于获取文本字段的值。但这不是必需的,因为在事件处理程序函数keyup
this
将引用keyup
事件绑定的input
元素。
如果您有时出于任何目的需要多次使用任何选择器,最好将其缓存在变量中并重用该变量。举个例子:
var input = $('form :input[type="text"]');
input.on('click', function() {
alert( this.value );
input.addClass('something');
});
<小时 />如果对委托事件处理程序使用 .on()
而不是 .live()
会更好,因为.live()
已被弃用。
您可以使用如下所示.on()
:
$('form').on('keyup', ':input[type="text"]', function() {
var val = $.trim(this.value);
$('form .create-playlist-button').prop('disabled', val.length == 0);
});
<小时 />注意
委托事件处理的.on()
语法如下所示:
$(staticContainer).on( eventName, target, handlerFunction )
在这里,staticContainer
指向在页面加载时属于 DOM 的元素,即它不是动态的,也是您要绑定事件的target
容器。
只是为了更多,去这里
.prop() vs .attr()
http://forum.jquery.com/topic/whats-the-difference-between-jquery-attr-and-jquery-prop
更新:
$(function(){
//var input = $('form :input[type="text"]')
$('form :input[type="text"]').live('keyup',function(){
$(this).closest('form').find('.create-playlist-button').prop('disabled',$(this).val().length==0);
});
});
在"keyup"处理程序中,您可以使用this
(或$(this)
通过jQuery使用它)来获取实际涉及的文本字段。我还更改了代码,以确保您找到正确的"同伴"按钮。它查找父元素链以查找封闭<form>
,然后在该表单中找到按钮。
不推荐使用分配事件处理程序的方式。它应该是:
$('form').on('keyup', ':input[type="text"]', function(){ ...
此外,如果您检查"按键"而不是"keyup",您将修复按钮直到第二个字符才起作用的错误。
编辑 — 哦,还有一件事:您通常应该使用 .prop()
来更新属性,而不是.attr()
。 对于较新的jQuery API来说,这是一件令人困惑的事情,但是您需要使用.attr
的时间很少见。不幸的是,在jQuery 1.6发布之前,有大量的旧教学材料被写回去。
你应该使用 .change() 方法!
在里面做一个测试:
if ($(this).val().length > 0)
...
else
...
来了...使用您的原始小提琴:
http://jsfiddle.net/9kKXX/4/
只需要稍作更改。
$(function(){
//var input = $('form :input[type="text"]')
$('form :input[type="text"]').live('keyup',function(){
$('form .create-playlist-button').attr('disabled',$(this).val().length==0);
});
});
小提琴:http://jsfiddle.net/9kKXX/36/
- 点击按钮输入不起作用
- 不允许在字段中输入不需要的字符
- 按键事件上的简单HTML输入不起作用
- 当您发布聊天消息时,聊天输入不会清除
- 始终在 jQuery 自动完成中显示特定选项,即使它与输入不匹配
- 通过JS更新时,Angularjs输入不会更改,而不是手动更新
- 数组输入不起作用
- 密码输入不起作用的Javascript模糊
- IE8:模式弹出窗口中的文本输入不会;t显示键入的文本
- 所需输入不;我无法在iPad3上使用Safari
- 通过用户输入不起作用来更改输入编号
- JavaScript-输入不是数字时提示
- 提交输入不'不要在IE和Firefox中发布
- html5画布上的键输入不总是有响应
- jQuery计时器对输入不起作用
- 当在ng重复中使用ng模型时,在页面加载时角度输入不为空
- 为什么 alert() 在输入不一致的位数后返回未定义
- 如果输入不存在,请插入输入
- JavaScript onfocus/onblur 特定于输入 - 不起作用
- jQuery:在输入字段中输入文本时,不启用该按钮