2011-08-10 46 views
0

我有一個jQuery插件:jQuery插件創作:我如何讓我的插件在多組值上運行?

(function($){ 
    $.fn.test = function(selector){ 
     $this = this; 

       $(selector).bind("click", function(){ 
        methods.showvalue($this); 
       }); 
    }; 
    var methods = { 
     showvalue : function($this){ 
      var output = ""; 
      $this.each(function(i,e){ 
       output += $(e).val(); 
      }) 
      alert(output); 
     } 
    } 
})(jQuery); 

有了這個標記:

<form> 
    <p> 
     First section<br /> 
     <input type="text" class="test" name="firstValue" value="one" /> 
     <input type="text" class="test" name="secondValue" value="two" /> 
     <input type="text" class="test" name="thirdValue" value="three" /> 
     <button type="button" id="button1">push</button> 
    </p> 
    <p> 
     Second section<br /> 
     <input type="text" class="test2" name="firstValue2" value="1" /> 
     <input type="text" class="test2" name="secondValue2" value="2" /> 
     <input type="text" class="test2" name="thirdValue2" value="3" /> 
     <button type="button" id="button2">push</button> 
    </p> 
</form> 

這初始化:

$(document).ready(function(){ 

     // first section 
     $(".test").test("#button1"); 

     // second section 
     $(".test2").test("#button2"); 
    }); 

無論我按哪個按鈕,我總是得到一個字符串「 123「。我的目標是當第二個按鈕被按下時獲得「123」,而第一個按鈕被按下時「onetwothree」。

我錯過了什麼?爲什麼不這樣做?

回答

1

需要聲明

var $this = this; 

否則,$這得到連接到窗口併成爲全球。

此外,你可能想這個代替,所以不重視的幾個回調:

$.fn.test = function(selector){ 
    var $this = this; 
    $(selector).bind("click", function(){ 
     methods.showvalue($this); 
    }); 
    return this; 
}; 

編輯:演示http://jsfiddle.net/VSDLJ/

+0

美麗! :-) 謝謝。 – quakkels

0

客戶可以參考的對象在每個循環:

return this.each(function() { 
    obj = $(this); 
}); 

或者你的情況:

return this.each(function() { 
    $this = $(this); 
    $(selector).bind("click", function(){ 
    methods.showvalue($this); 
    }); 
}); 
+0

對不起,沒有。那只是提醒「3」 – quakkels

相關問題