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

+1

Вы не должны полагаться на механизм JavaScript, чтобы добавить точки с запятой в ваш код. Поверьте мне, это приведет к отладке боли там. – BoltClock

+0

Я знаю, но это не вызывает неопределенный – Richard

ответ

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

+0

Я знаю, почему this.rel не работает. не является родным для тега img, я тестировал его на теге ссылки и работал. – Richard

+1

о различиях: существенное, что я хотел бы сказать, возможность добавить несколько методов. Кроме того, $ .extend дает вам возможность решить, если существующие объекты с используемым именем (если они есть) должны быть полностью перезаписаны или только расширены. Назначение, которое вы используете, всегда будет перезаписываться. –

Смежные вопросы