return $.event.trigger 结果如何

How return $.event.trigger result

如何return事件引起的工作结果? 示例:

var res = $.event.trigger({
  type: 'my_event_name',
  element: el
});
console.dir(res);

$("body").on('my_event_name', function(e)
{
   return save_data(e.element);
});

如果没有事件处理程序,则有执行默认操作的代码。如果有事件处理程序,则必须执行他的工作,而默认代码不应该工作。 示例伪代码:

var res = $.event.trigger({
  type: 'my_event_name',
  element: el
});

if (res)
{
    return true;
}
else
{
    // default action code
}

您无法在结果中传回数据,但您可以检查 e.isDefaultPrevented() 并根据需要在函数中使用 e.preventDefault()

例如

$("body").on('my_event_name', function(e, params)
{
   if (save_data(params.element)){
       e.preventdefault();
   }
});

并像这样使用:

var evt = $.Event('my_event_name');
$.event.trigger( evt, {
  element: el
});

if (evt.isDefaultPrevented())
{
    return true;
}
else
{
    // default action code
}

注意:我可能把逻辑颠倒了,因为你的例子不完整:)

一种替代方法(实际上 发送数据)是生成第二个自定义事件,同时传递数据,但这需要在启动后为结果提供单独的处理程序过程。

$("body").on('my_event_name', function(e)
{
   if (save_data(e.element)){
      $.event.trigger({
         type: 'my_other_event_name',
         data: trueOrSomethingElse
      });
   }
});

并聆听:

$("body").on('my_other_event_name', function(e)
{
    console.log(e.data);
});

您正在尝试以同步方式使用事件。这是行不通的。当您 运行 一个函数时,您不能 "wait" 让事件发生。

编辑:我不喜欢这个答案。来自 TrueBlueAussie "The custom events shown are not asynchronous. They are simply broadcast to the target element, and bubble to its ancestors, then immediately return. That is why you can use e.isDefaultPrevented() on a custom event."

您可能想要这样的东西。

// trigger your event somewhere, maybe in another function
var res = $.event.trigger({
  type: 'my_event_name',
  element: el
});

$("body").on('my_event_name', function(e)
{
    // when your event fires, it will fire doMyEvent()
    doMyEvent(e.element)
});

function doMyEvent(eventData){
    if (eventData)
    {
        return true;
    }
    else
    {
        // default action code
    }
}