为什么这个jQuery one-liner不会做它应该做的事情?

时间:2011-03-13 21:46:25

标签: jquery attributes

我正在进行一些表单UI编码并编写了这个jQuery one-liner:

  

$( '输入[类型=文本]')VAL($(本).attr( '默认值'));

意图是为每个输入文本字段赋予其在属性中提供的默认值。

有什么建议吗? TIA

5 个答案:

答案 0 :(得分:5)

$('input[type=text]').each(function () {
    $(this).val($(this).attr('default-value'));
});
this调用中的

val()没有引用该元素,但它只是你运行这个单行的函数的上下文。

此外,在定义自定义属性时,您可能会考虑在之前投资HTML5并使用“data- *”约定:在HTML5中,定义自定义属性是合法的,只要它们以“data-”为前缀即可。所以,我会使用“data-default”而不是“default-value”。

答案 1 :(得分:3)

尝试:

$('input[type=text]').each(function() {
   $(this).val($(this).attr('default-value'));
});

您的问题是$(this)未在您使用它的上下文中定义。

答案 2 :(得分:2)

它不起作用,因为this的上下文不是您所期望的。试试这个:

$('input[type=text]').each(function(){
    var $this = $(this);
    $this.val($this.attr('default-value'));
});

答案 3 :(得分:1)

我想你想要:

$('input[type=text]').val(function(i,e) { return $(e).attr('default-value'); } );

答案 4 :(得分:-1)

因为您没有正确引用元素...

您正在立即将输入的val分配给$(this)的当前范围,而不是您要获得的元素。

$(":text").each(function() { $(this).val($(this).attr('default-value')); });