代码之家  ›  专栏  ›  技术社区  ›  Dave

使用jquery.trigger调用返回值的自定义函数

  •  11
  • Dave  · 技术社区  · 14 年前

    是否有任何方法可以使用jquery的.bind()和.trigger()调用来执行用户定义的函数(例如:save())并对该方法的返回执行操作?例如:

    $("#aForm").bind ('save', function () {
      return true;
    });
    

    然后:

    if ($("#aForm").trigger ('save') == true) {
      doSomething ();
    }
    
    4 回复  |  直到 10 年前
        1
  •  8
  •   Jimmy Kane    10 年前

    我知道这个问题由来已久,但也许这能帮助别人。

    正如palith所指出的,您不能返回值,因为触发器事件是异步的。 您可以做的是将对象作为参数传递给事件。默认情况下,javascript对象总是引用原始对象。

    如。:

    绑定:

    $(...).bind('example',function (evt,ret) { 
        ret.val = false;
    });
    

    触发:

    var ret = {ret:true};
    $(...).trigger('example',[ret]);
    if (!ret.ret)
        //event return false
    else
        //event returned true
    
        2
  •  5
  •   buley    13 年前

    退房 triggerHandler() 在许多其他方面表现得像 trigger() 但允许您返回一个值。

    从文档中:

    .triggerHandler()方法的行为与.trigger()类似,其中 以下例外情况:

    • .triggerhandler()方法不会导致发生事件的默认行为(例如表单提交)。
    • 虽然.trigger()将对jquery对象匹配的所有元素进行操作,.triggerhandler()只影响第一个匹配的元素。
    • 使用.triggerhandler()创建的事件不会在DOM层次结构中冒泡;如果目标元素不直接处理这些事件, 他们什么都不做。
    • .triggerhandler()不返回jquery对象(允许链接),而是返回最后一个返回的值 导致执行的处理程序。如果没有触发任何处理程序,则 返回未定义的
        3
  •  4
  •   user1003545    11 年前

    您还可以使用jquery内置 event.preventDefault() event.isDefaultPrevented() :

    $("#aForm").bind ('save', function (event) {
        return true;
        // "return false" or "event.preventDefault()" have the same effect
      }
    });
    

    然后:

    var event = $.Event('save')
    $("#aForm").trigger (event)
    if (event.isDefaultPrevented() == false) {
      doSomething ();
    }
    
        4
  •  3
  •   Vivin Paliath    14 年前

    为什么不对回调本身的返回值执行操作?它拿走了额外的支票(这不会像你期望的那样有效)。

    $("#aForm").bind ('save', function () {
      if(some stuff happens that is true) {
          doSomething();
      }
    
      else {
          doSomethingElse();
      }
    });
    

    回调不同步工作。它们用于处理异步发生的事情(如事件)。在回调的上下文中,它们是在发生某些事情时运行的代码片段。从中返回值真的没有意义。在您的示例中,由于您希望检查回调的返回值,因此可以确保 只有 在回调运行时获取返回值(因为您试图像使用常规函数一样使用它们)。在这种情况下,将该逻辑放入回调本身(如我上面所示)。