2012-12-05 42 views
2

我想获取上一个元素。所以当点击.percen时我想提醒前一个元素的值。目前我得到undefined。问题是什么?prev元素不返回

<input class="c currency" type="text" name="artigoAlternativo1_C"/> 
<input class="d currency percen" type="text" name="artigoAlternativo1_D"/> 

<br/> 

<input class="c currency" type="text" name="artigoAlternativo1_C"/> 
<input class="d currency percen" type="text" name="artigoAlternativo1_D"/> 
$.fn.percentageFormat = function() { 
    this.each(function (i) { 
     $(this).change(function (e) { 
      var $curr = $(this); 
      $curr_ = $curr.prev('.c'); 
      alert(this.value); 
      alert($curr_.prev().value); 
     }); 
    }); 
    return this; 
} 
$(function() { 
    $('.percen').percentageFormat(); 
}); 

demo

+1

@Adil,我不认为这是实际上是真的;看到这里:http://docs.jquery.com/Plugins/Authoring#Context – FixMaker

回答

3

你两次调用prev方法和jQuery对象没有value性质,变化:

alert($curr_.prev().value); 

要:

alert($curr.prev().val()); 

或:

alert($curr_.val()); 

http://jsfiddle.net/2gf95/

+0

实际上,它应该是'$ curr_.val()'。如果他已经定义了'$ curr_ = $ curr.prev('。c');'没有必要再这样做。 – Christoph

3

在你的代码$curr_是一个jQuery元素,所以你需要使用val()来获取值。你也使用了两次prev()。试试这个:

$.fn.percentageFormat = function() { 
    this.each(function (i) { 
     $(this).change(function (e) { 
      var $curr = $(this); 
      $curr_ = $curr.prev('.c'); 
      alert(this.value); 
      alert($curr_.val()); // < Note no prev() here, and use of val() 
     }); 
    }); 
    return this; 
} 
$(function() { 
    $('.percen').percentageFormat(); 
}); 

Example fiddle