2016-01-10 3 views
2

Что делает click.stupidtable означает здесь: $table.on("click.stupidtable")?Что такое .on ("click.stupidtable") в плагине jquery?

И $(this).stupidsort(): Я думал, $(this) будет относиться к $table элементу, так что элемент, на котором был вызван плагин, но тогда он называет stupidsort(), поэтому я немного запутался:

(function($) { 
    $.fn.stupidtable = function(sortFns) { 
    return this.each(function() { 
     var $table = $(this); 
     sortFns = sortFns || {}; 
     sortFns = $.extend({}, $.fn.stupidtable.default_sort_fns, sortFns); 
     $table.data('sortFns', sortFns); 

     $table.on("click.stupidtable", "thead th", function() { 
      $(this).stupidsort(); 
     }); 
    }); 
    }; 


    // Expects $("#mytable").stupidtable() to have already been called. 
    // Call on a table header. 
    $.fn.stupidsort = function(force_direction){ 
+0

'.on (" click.stupidtable ")' связывает событие 'click' в' $ table' в пространстве имен '.stupidtable'. Вы можете удалить все события под этим именемpac с помощью '$ table.off ('. Stupidtable')' – andlrc

+0

'$ (this) .stupidsort()' вызывает '$ .fn.stupidsort' и устанавливает контекст' this' который является узлом DOM таблицы. – andlrc

+0

@ dev-null да, спасибо за второй пункт, я смешал его в своем уме. Хорошо для первого момента, не знал об этом. Спасибо – Paul

ответ

2

, что здесь click.stupidtable означает здесь: $table.on("click.stupidtable")?

Подключается к namespacing обработчик события; см. on для подробностей. Это облегчает удаление обработчика позже, не нарушая других обработчиков click, которые могут быть прикреплены.

Е.Г., считает:

$("div").on("click", function() { alert("1"); }); 
$("div").on("click.foo", function() { alert("2"); }); 

Если нажать любой DIV, который существовал, когда они бежали, мы увидим, как предупреждения. Тогда мы можем использовать пространство имен отцепить только второй:

$("div").off("click.foo"); 

Теперь мы видим только 1 предупреждение.

И $(this).stupidsort(): Я думал, что $(this) будет ссылаться на $table элемент ...

Нет, в этом коде this относится к th элементу, так $(this) создает JQuery оболочку вокруг th. Обратите внимание, что эта линия внутри этот обработчик события:

$table.on("click.stupidtable", "thead th", function() { 
    $(this).stupidsort(); 
}); 

Поскольку обработчик события делегируется (см on подробную информацию о том, что тоже), в функции обратного вызова, this будет ссылаться на th элемент, который щелкнули.

поэтому элемент, на котором был вызван плагин, но затем он вызывает stupidsort(), так что я немного запутался

stupidsort представляет собой плагин, определенный позже в коде; $(this).stupidsort() просто вызывает плагин, используя обертку jQuery вокруг th, которая была нажата.

+0

хорошо спасибо, я не знал об пространствах имен.Спасибо за ваш ответ – Paul

+0

@Paul: Я только заметил, что '$ (this) .stupidsort(), о котором вы говорили, находится внутри обработчика события, поэтому я исправил вторую часть ответа. –

1

JS-события могут быть помещены в имена, поэтому это означает, что u назначает событие clickpaced click (namespace: stupidtable).

+0

* «События JS могут содержать имена» * JavaScript не имеет событий. События DOM не могут быть помещены в имена. * jQuery * предоставляет инфраструктуру поверх событий DOM, которая включает функцию namespacing. –

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