jquery返回触发器

时间:2016-09-03 13:14:15

标签: javascript jquery events

我正在使用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

谢谢。

1 个答案:

答案 0 :(得分: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