2011-12-18 71 views
1

我寫了1-2 jQuery插件,但他們都失敗了,當我嘗試使用多個實例....我沒有找到任何解決方案。請看下面的代碼,如果你在這個插件上創建2個實例,它不工作....這個代碼有什麼問題。什麼使得插件能夠運行多個實例?jquery插件多個實例不工作

<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> 
<html> 
<head> 
</head> 
<script src="jquery.js"></script> 
<script> 
    (function($){ 
    $.fn.truncate = function(options) { 

     return this.each(function() { 
     obj = $(this); 
     var body = obj.html(); 

    $(obj).focus(function(){ 
     alert($(obj).attr("id")); 
    });  

     }); 
    }; 
    })(jQuery); 
    </script> 
<SCRIPT LANGUAGE="JavaScript"> 
<!-- 
    $().ready(function(){ 
    $('#t1').truncate(); 
    $('#t2').truncate(); 
    });  
//--> 
</SCRIPT> 
<body> 
    <input type="text" id="t1"> 
    <input type="text" id="t2"> 
</body> 
</html> 

回答

1

嘗試以此爲基礎..

​​
+0

Ahhhaaaa現在已經很清楚了......我甚至嘗試過添加選項......它的工作......感謝朋友.....我不會再繼續在我的插件中實現它,現在它只支持單個實例。 – 2011-12-18 10:39:30

4

的問題就在這裏:

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

你忘了申報obj機智h var。這將是一個全局變量 - 每次調用.truncate()時都會被覆蓋。這應該更好的工作:

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

順便說一句,一個空的jQuery對象($())是officially not recommended上調用.ready()。使用此:

$(function(){ 
    … 
}); 

或本:

$(document).ready(function(){ 
    … 
}); 

代替。

+0

+ +1爲一個非常好的主管答案。 – tim 2013-03-05 21:23:20