2013-06-22 4 views
0

Я хочу узнать, что является самым быстрым способом для повторения или предоставления этой «функции» под именем, чтобы я мог вызвать его в рамках другой функции в том же документе ->runThisFunction();Вызов функции как функции в javascript/jQuery

Код:

$('body').on("click", ".manufacturer_details_link", function (e) { 
       e.preventDefault(); 

       var self = $(this); 
       var id = self.data("id"); 

       var url = $("#manufacturers_table").data("infourl"); 

       var data_array = { 
         id : id 
        }; 

       ajaxCall(url, data_array, "rhs_info"); 

      }); 

ответ

2

Если я все понял правильно:

function bodyOnClick(e, optionalId) { 
    var nodeRef = optionalId ? document.getElementById(optionalId) : this; 

    if(typeof e === 'object') 
     e.preventDefault(); 

    var self = $(this); 
    var id = nodeRef.data("id"); 

    var url = $("#manufacturers_table").data("infourl"); 

    var data_array = { 
     id : id 
    }; 

    ajaxCall(url, data_array, "rhs_info"); 
} 

// --- 

$('body').on("click", ".manufacturer_details_link", bodyOnClick); 

// --- 

bodyOnClick('someNodeID'); 

Но на самом деле, позвонив по номеру bodyOnClick, это не имеет смысла, так как this не ссылается ни на какой номер HTMLElement. Так что имеет смысл только если вы повторно использовать метод на других обработчиков событий, или явно вызвать его как

bodyOnClick.call(someNodeReference); 

+0

Спасибо Энди, могу ли я передать идентификатор как nodeRef? –

+1

@JessMcKenzie Нет, это должен быть фактический узел. То есть '$ (" # foo ") [0]' – mekwall

+0

@JessMcKenzie, вы могли бы это сделать, но вам нужно будет переписать функцию для этого, я отредактировал функцию, чтобы дать вам базовый пример. – jAndy

0

Вы имеете в виду, как это?

function someFunction(e){ 
    e.preventDefault(); 
    var id = $(this).data("id"), 
     url = $("#manufacturers_table").data("infourl"), 
     data_array = {id: id}; 
    ajaxCall(url, data_array, "rhs_info"); 
} 
//$('.manufacturer_details_link').click(someFunction); 

// changed, per feedback 
$('.manufacturer_details_link').on('click', someFunction); 
+0

Давай, ОП использует '.on', не изучайте иначе. :) – andlrc

+0

$ ('. Manufacturer_details_link'). On ('click', someFunction); –

+1

OP использует '.on', поскольку это делегированное связывание. Не меняйте его, если вы не знаете, что он сработает. – mekwall