如何返回$ .event.trigger结果

时间:2015-04-27 14:53:50

标签: jquery events triggers

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

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
}

2 个答案:

答案 0 :(得分:3)

您无法在结果中传回数据,但您可以根据需要检查$array1 = array('A','A','A','A','A'); $array2 = array('C','A','A','E','D'); for($i = 0; $i < 3; $i++){ $min = 0; $max = 4; $n = rand($min, $max); $array1[$n] = $array2[$n]; } 并使用e.isDefaultPrevented()

e.g。

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
      });
   }
});

答案 1 :(得分:0)

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

编辑:我对这个答案很感兴趣。来自 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
    }
}