【问题标题】:How return $.event.trigger result如何返回 $.event.trigger 结果
【发布时间】:2015-07-06 02:29:57
【问题描述】:

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

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
}

【问题讨论】:

  • 你不能从事件处理程序返回数据,所以基本上你不能
  • 现在您最好发布一个具体示例,说明您为什么需要这种行为
  • 如果没有事件处理程序,有一个执行默认操作的代码。如果有事件处理程序,你必须执行他的工作,默认代码不应该工作。
  • 该评论没有多大意义。请更新问题,用正确的句子完整描述你正在尝试做什么
  • 你怎么知道是否触发了?如果他不返回结果

标签: jquery events triggers


【解决方案1】:

您正在尝试以同步方式使用事件。这行不通。运行函数时不能“等待”事件发生。

编辑:我对这个答案很满意。来自 TrueBlueAussie “显示的自定义事件不是异步的。它们只是广播到目标元素,然后冒泡到它的祖先,然后立即返回。这就是您可以在自定义事件上使用 e.isDefaultPrevented() 的原因。”

你可能想要这样的东西。

// 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
    }
}

【讨论】:

  • 显示的自定义事件不是异步的。它们只是简单地广播到目标元素,然后冒泡到它的祖先,然后立即返回。这就是您可以在自定义事件上使用e.isDefaultPrevented() 的原因。
  • 抱歉,我应该使用更好的措辞。我将编辑我的答案。
【解决方案2】:

你不能在结果中传回数据,但你可以检查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);
});

【讨论】:

  • 未捕获类型错误:无法读取未定义的属性“isDefaultPrevented”
  • @djmartini:已更新。如果您需要更多详细信息,请提供足以显示问题/解决方案的 JSFiddle。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多