2011-07-03 91 views
0

我有我想要使用jQuery的触发方式来触发一个自定义事件:如何从jQuery触发器方法获得布尔返回值?

$(wizard).trigger('validatingStepValues'); 

然后在向导的当前步骤的代码,我订阅了这个事件如下:

$(wizard).bind('validatingStepValues', function(){ 
    // Validating step's form data here; returning false on invalid state. 
}); 

然后在我向导,如果从验证过程返回一个错误的值,我希望能够阻止用户进入下一步?我想有这样的:

$(wizard).trigger('validatingStepValues', validReturnCallback, invalidReturnCallback) 

回答

2

你有没有考虑使用类似:

function wizardValidator(successCallback, failureCallback) { 
    return function() { 

     // Validating step's form data here; 

     if (wasValid && successCallback) { 
      successCallback(); 
     } 
     else if (! wasValid && failureCallback) { 
      failureCallback(); 
     } 

     return wasValid; 
    }; 
} 

$(wizard).bind('validatingStepValues', wizardValidator(validReturnCallback, invalidReturnCallback)); 

这就要求你知道你想要的时候使用回调绑定事件监听器。如果你希望能够在不同的时间使用不同的回调函数,你可以定义更多的事件类型,如:

$(wizard).bind('validatingStep2Values', wizardValidator(validStep2ReturnCallback, invalidStep2ReturnCallback)); 
$(wizard).bind('validatingStep3Values', wizardValidator(validStep3ReturnCallback, invalidStep3ReturnCallback)); 

或者,您可以通过调用trigger()传播了DOM层次创建活动。返回false事件处理程序取消此传播。因此,您可以将您所需的成功回调函数作为向导的父节点上的事件侦听器进行绑定。但是,这不会做任何事情来让你的失败回调被执行。

+0

这意味着,对于每一步,我应该有一个独特的事件。我认为这不合适。但我不明白第二部分。也许这太技术:);)。但我很感激你的回复。 –