如何使用简单的jQuery禁用HTML文本字段?

14

我有这段简单的jQuery代码要测试。

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
      $("button").click(function(){
          $("text").attr("disabled","");
      });
    });
</script>
</head>
<body>
<input type="text">
<br />
<button>Set the textfield disabled</button>
</body>
</html>

基本上,HTML页面带有一个简单的按钮和文本框。 我想要的是在单击按钮时将输入字段禁用。 但它不起作用???

(PS:此代码来自w3schools.com网站,只是为了简单地测试jQuery的功能)


这就解释了为什么W3School在这里不受欢迎。HTML无效。看看那个文本元素... - gdoron
@gdoron:<input type="text"> 元素有什么问题吗?它没有正确关闭吗?在HTML5中不是有效的吗?<input>元素从来没有内容,因此它是明确无歧的。 - mpen
@Mark,请看一下我的答案。它应该使用自闭合的<input />,就像每个XML元素一样。 - gdoron
1
@gdoron:你的回答没有解释任何东西。HTML不是XML(不要与XHTML混淆)。这是可选的。阅读规范。或者参见https://dev59.com/WnA75IYBdhLWcg3w9-Ox - mpen
@Mark。你说得对,但是“较小的设备通常缺乏解释“错误”的标记语言所需的资源或功率。”因此,编写无效的XHTML代码是不好的实践。在我看来。 - gdoron
@gdoron:我同意你的观点,正确终止元素是一个好习惯。但是我要指出的是,你说“HTML无效”这个说法是错误的。他的XHTML无效,没错。w3schools的示例完全符合规范。 - mpen
6个回答

18

从jQuery 1.7开始,你可以使用.prop

$(document).ready(function(){
  $("button").click(function(){
      $(":text").prop("disabled", true);
  });
});

在1.7之前,您可以执行以下操作:

$(document).ready(function(){
  $("button").click(function(){
      $(":text").attr("disabled", true);
  });
});

顺便提一下:使用$(":text")$('input[type="text"]') 来选择所有文本类型的元素。


$('text') 不是一个有效的选择器! - devnull69
@gabitzish 是的,我知道,但是对于 disabled,最好使用 .prop() 而不是 .attr() - xdazz

2

试试这个:

    <html>   
<head>   
<script type="text/javascript" src="jquery.js"></script>   
<script type="text/javascript">   
$(document).ready(function(){     
$("button").click(function(){         
$("#text").attr("disabled","true");     
});   
});   
</script>   
</head>   
<body>  
 <input id="text" type="text">
<br />
<button>Set the textfield disabled</button>
</body>
</html>

@gdoron Tapas也更改了下面的HTML。 - devnull69
@devnull69。但是用糟糕的缩进隐藏它... =) - gdoron
谢谢大家。我测试了上面的代码,它可以工作!只是我还是对jQuery感到困惑,因为选择器格式化的选项可能因你使用的jQuery版本而异...哦,好吧。每天都学习新东西。 - awongCM

1

或者(更现代化):

$("input[type=text]").prop('disabled', true);

1

jquery 中没有 text 选择器。您需要使用属性选择器 [attribute=value]

$('input[type=text]').prop('disabled', true); // prop Works on jquery 1.7+

或者:

$('input[type=text]').attr('disabled', 'disabled'); // Works in each version. 
                                                    // But isn't W3C standard.

有一个:text选择器,但它比第一种选项效率低,参见docs

$(':text')等同于$('[type=text]'),因此选择所有元素。与其他伪类选择器(以“:”开头的那些)一样,建议在其前面加上标签名或其他选择器;否则,通用选择器(“”)将被隐含。换句话说,裸露的$(':text')等同于$(':text'),因此应改用$('input:text')。

附加说明:由于:text是jQuery扩展而不是CSS规范的一部分,使用:text的查询无法利用本机DOM querySelectorAll()方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="text"]

请注意,您的XHTML无效。您应该关闭<input type="text"> => <input type="text" />


0

$("input").attr("disabled","disabled");


-1
“disabled”是一个属性,而不是一个本质上的属性。像“checked”或“disabled”这样的布尔值在以这种方式访问它们时并不总是能够正确地更新(或检索)。请使用
$(':text').prop('disabled',true);

替代方案。


$('text') 不是一个有效的选择器! - devnull69
@devnull69:我的错。我觉得有点问题。:text 是无效的。现已更新。我猜他本来应该检查一下选择器是否匹配了任何元素。 - mpen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接