2016-09-03 2 views
1

Я использую JQuery, чтобы прикрепить функцию к элементу:JQuery возвращение триггера

$("button").on("random", 
       function() { 

, но я хочу, чтобы функция возвращала результат:

    alert('called'); 
       return 'button has been clicked'; 
       } 

Проблема заключается в том, когда я «триггер» для запуска функции, функция выполняет, но результат не возвращается - вместо этого возвращается элемент JQuery (я думаю).

$("a").on("click", 
      function() {alert($('button').trigger('random'));} 
     ) 

Как написать или вызвать функцию так, чтобы ее результат был возвращен?

JSFiddle: https://jsfiddle.net/cs3cqv3z/3

Спасибо.

+0

Не оповещать снова при вызове триггера. Функция выполняет «предупреждение». –

+0

@AliSheikhpour, предупреждения, чтобы выявить ошибку, действительно, триггер приводит к двум предупреждениям в строке - для запускаемой функции и отображению возвращенных данных. Но - возвращенные данные не являются результатом срабатывания функции, это моя проблема. – boisvert

ответ

2

Вы не можете вернуть значение триггеру, но вы можете сохранить его значение. Один из способов - передать объект в вызов и сохранить в нем значение.

$(document).ready(function() { 
    $("button").on("random", 
        function(e, obj) { 
        alert('called'); 
        obj.value= 'button has been clicked'; 
        } 
       ); 
    $("a").on("click", 
       function() 
       { 
var infoObj = {value: ''};    $('button').trigger('random',[infoObj]); 
console.log(infoObj.value)} 
      ) 
    } 
) 

JSFIDDLE

Another way is using jQuery's `.data()` method. 

$(document).ready(function() { 
    $("button").on("random", 
        function(e, obj) { 
        alert('called'); 
        obj.value= 'button has been clicked'; 
        } 
       ); 
    $("a").on("click", 
       function() 
       { 
var infoObj = {value: ''};    $('button').trigger('random'); 
alert(infoObj.value)} 
      ) 
    } 
) 

JSFIDDLE

Другой способ заключается в использовании .triggerHandler() вместо .trigger(). Однако я бы посоветовал вам сначала пройти через документы и посмотреть, соответствует ли это вашим требованиям. Однако он решает проблему.

$(document).ready(function() { 
    $("button").on("random", 
      function(e) { 
       alert('called'); 
       return 'button has been clicked'; 
      } 
    ); 
    $("a").on("click", function() {    
       alert($('button').triggerHandler('random')); 
     }) 
}) 

JSFIDDLE

+0

Я думал об этом, но чувствую, что это довольно грязно ... Если в ближайшие несколько дней не будет лучшего варианта, я приму твое. – boisvert

+0

@boisvert Добавлено другое решение. Пожалуйста, проверьте –

+0

спасибо, я должен был подумать о triggerHandler! И это объясняет, почему результат функции не появляется, поскольку триггер вызывает функцию как часть ответа события. – boisvert

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