jquery $(this).attr()为什么获取不到属性值啊??

wqqueenie 发布于 2017/05/11 11:35
阅读 2K+
收藏 0

如题所示,在js中调用$(this).attr()总是会获取不到属性的值,但之前都有获取过,现在都是undifind

加载中
1
莫默磨墨先生
莫默磨墨先生

使用 $('selector').prop();

  • .attr() 可以理解为“字面量”属性,用来获取在浏览器中右键查看源代码时可以看到的属性值;
  • .prop() 获取当前真正的属性,尤其是属性值频繁被改动的 selector,比如:radio, checkbox
0
小小二哈
小小二哈

能发完整的代码吗?

0
0
FEWY
FEWY

你是不是要获取页面被选中的元素。

可以参考 https://my.oschina.net/u/3391355/blog/872064

莫默磨墨先生
莫默磨墨先生
总结得非常好,赞!
0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

$(this).attr(这里需要输入属性key)

0
f
faithbro

$(this).attr()  你的this是什么,贴具体的代码

0
Kit_lee
Kit_lee

大概猜测你应该是在异步的回调函数中再次调用$(this),如$('.a').click(function(){ $(this).attr('b', 'c'); $.ajax(...., success: function(){ var b = $(this).attr('b'); }) }),这样在ajax的成功回调方法调$(this),当然是undefined

0
Kit_lee
Kit_lee

要知道异步的回调方法已经是另外一段执行的代码了,跟原来的代码段不在同一个scope里,同价于

$('.a').click(function(){ $(this).attr('b', 'c'); $.ajax(...., success: f }) });

function f(){

... //试问你在这个回调方法中$(this)能不拿到undefined才怪

}

wqqueenie
wqqueenie
谢谢!是有点大意了,确实写的作用域不同了
0
Kit_lee
Kit_lee

引用来自“莫默磨墨先生”的评论

使用 $('selector').prop();

  • .attr() 可以理解为“字面量”属性,用来获取在浏览器中右键查看源代码时可以看到的属性值;
  • .prop() 获取当前真正的属性,尤其是属性值频繁被改动的 selector,比如:radio, checkbox

现在楼主是拿到undefined,并不是prop与attr方法的区别问题

0
莫默磨墨先生
莫默磨墨先生

@Kit_lee

<input type="checkbox" id="cb">
//"checked" property changed by js
$('#cb')[0].checked = true;
// .attr() can't get "checked" status
$('#cb').attr('checked'); //undefined
//Bingo!
$('#cb').prop('checked'); //true

 

Kit_lee
Kit_lee
你是对的,如果楼主要拿的真的是要拿checked, selected, disabled这类属性,attr确实有可能返回undefined
返回顶部
顶部