2010-10-15 72 views
0

有人可以解釋爲什麼this.rel返回未定義的,也是正則表達式應該做的。 如果this.rel未定義,則正則表達式也不起作用,並且正在導致某種錯誤,因爲下面的警報不會觸發?jquery插件中的這個返回undefined

$.fn.facebox= function(settings) { 
    init(settings) 

    function clickHandler() { 
     $.facebox.loading(true) 
alert($(this).attr('rel')); 
//alert(String(this.rel)); 
     // support for rel="facebox.inline_popup" syntax, to add a class 
     // also supports deprecated "facebox[.inline_popup]" syntax 
     var klass = this.rel.match(/facebox\[?\.(\w+)\]?/) 
    alert(klass); 
alert('ppp'); 
    // if (klass) klass = klass[1] 

     //fillfaceboxFromHref(this.href, klass) 
     return false 
    } 

    return this.click(clickHandler) 
    } 

感謝,理查德

+0

分號;;;;;;; – jAndy 2010-10-15 23:34:23

+1

你不應該依賴JavaScript引擎來爲你的代碼添加分號。相信我,它會讓調試成爲一件痛苦的事情。 – BoltClock 2010-10-15 23:46:00

+0

我知道,但它不會導致undefined – Richard 2010-10-16 00:06:29

回答

1

一個jQuery的對象具有許多性能,它們中的一個是與所找到的元素的數組。

你必須通過此數組行走並綁定事件這些單個元素:

jQuery.fn.extend({ 
facebox: function() 
{ 
     //here this is a jQuery-object 
    function clickHandler() 
     { 
     //here this is a DOMElement 
     alert($(this).attr('rel')); 
     return false 
     } 

    return this.each(function() { 
       var self = jQuery(this); 
       self.click(clickHandler) 
      }); 

}});

+0

這樣做是否有顯着差異jQuery.fn.extend({facebox:function() – Richard 2010-10-16 00:19:39

+0

我知道爲什麼this.rel不起作用,這是因爲它是不是原生的img標籤我測試了它的鏈接標籤,它的工作。 – Richard 2010-10-16 00:38:03

+1

關於差異:重要的我想說的是添加多個方法的選項此外$ .extend讓你能夠決定,如果使用過的名稱(如果有的話)的現有對象應該被完全覆蓋或者只能被擴展,你實際使用的任務總是會被覆蓋 – 2010-10-16 02:11:56