jQuery的val()不起作用?

3
$("input[type=radio]").change(function(){
    alert(this.val());
}); 

为什么这行不通?我想要的是每当选中一个单选按钮时,页面都会弹出其值。

你有任何错误吗?当执行此操作时,DOM是否已准备就绪?我们需要查看包含HTML的整个页面。 - Alex Turpin
5个回答

10

我认为你需要这样做:

$("input[type=radio]").change(function(){
    alert($(this).val());
}); 

5

正如@Eonasdan所说,你需要使用$(this).val()

原因是this指向普通的DOM元素,而.val()需要一个jQuery对象。

顺便提一下,在属性选择器中,你必须引用属性值:$("input[type='radio']")


尽管它们的文档将它们称为“强制性”,但引号的要求实际上只针对具有空格的属性值以及jQuery 1.4.4+版本;在此之前的版本也可以正常工作(大多数情况下)。话虽如此,我仍然建议始终包含引号。 - Cᴏʀʏ
我猜引号只是为了避免破坏旧代码和大量老插件的情况下,对于没有空格的情况是可选的。就像你可以在PHP中写字母数字字符串一样,不需要引号(是的,真的!但会抛出“将常量视为字符串”的提示),但这并不是你应该做的事情。 - ThiefMaster

1
你需要将这个对象“jQuerify”:
不要使用this.val(),而应该使用$(this).val()。

0

可以试试这个:

$("input[type=radio]").change(function(){
    alert($(this).val());
});

你必须将this包装在jQuery对象中才能使用.val()方法。


0
在jQuery中,您传递给其API的函数提供this作为匹配选择器的DOM元素。但是,this不是一个jQuery对象,实际上它是一个普通的DOM元素。如果您想在this上调用jQuery方法,则需要使用jQuery包装this$(this)
$("input[type=radio]").change(function(){
    alert($(this).val());
});

如果您需要多次使用它,请不要忘记进行缓存,以避免反复创建包装器。

$("input[type=radio]").change(function(){
    var $this = $(this);
    $this.addClass('omgitchanged');
    alert($this.val());
});

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