在foreach中使用它时,属性值为undefined

时间:2017-12-19 07:05:55

标签: jquery foreach this

我的自定义属性default的字段很少。当我点击标识为reset的按钮时,我想将类afield的所有字段的值更改为默认值。

示例字段是,

<input type="text" class="afield" id="field1" default="10" value="10" />
<input type="text" class="afield" id="field2" default="20" value="20" />

以下代码更改所有字段&#39;价值为undefined

$(document).on('click', '#reset', function(event){
   event.preventDefault();
   var afields = $('.afield')
   $.each(afields ,function(){ 
         this.value = this['default']; 
   });
});

但是当我使用id获取元素并更改值时,它可以正常工作。代码如下,

$(document).on('click', '#reset', function(event){
   event.preventDefault();
   var afields = $('.afield')
   $.each(afields ,function(){ 
         var ele =  $('#'+this.id)
         var defaultval = ele.attr('default')
         ele.val(defaultval)
   });
});

为什么第一种方法将undefined作为默认值? 有什么方法可以在循环中使用this对象来实现这个目的吗?

2 个答案:

答案 0 :(得分:1)

问题是jQuery中的“this”每个都是HTML元素,因此要检索自定义attribute值,您应该将示例重写为:

$(document).on('click', '#reset', function(event){
   event.preventDefault();
   var afields = $('.afield')
   $.each(afields ,function(){ 
         this.value = this.attributes.default.value; 
   });
});

再次检查文档(HTML DOM Element attributes

或者因为你使用jQuery,你可能不会使事情过于复杂,只需使用

$(this).val($(this).attr('default'))

答案 1 :(得分:1)

尝试使用以下工作代码段

$(document).on('click', '#reset', function(event){
   event.preventDefault();
   var afields = $('.afield')
   $.each(afields ,function(){ 
         this.value = $(this).attr("default"); 
   });
});
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="afield" id="field1" default="10"  />
<input type="text" class="afield" id="field2" default="20"  />
<input type="button" id="reset" value ="Reset"/>