2010-10-15 54 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