Javascript jQuery-迭代事件处理程序
我在Javascript jQuery-迭代事件处理程序,javascript,jquery,Javascript,Jquery,我在.submit处理程序中遇到了一个奇怪的问题 function validateOnSubmit() { //sacar el rojo de textfield de producto if (currentRestrictions == null) { //debe seleccionar un producto $("#invalidProductDialog").dialog("open"); return false;
.submit
处理程序中遇到了一个奇怪的问题
function validateOnSubmit() {
//sacar el rojo de textfield de producto
if (currentRestrictions == null) {
//debe seleccionar un producto
$("#invalidProductDialog").dialog("open");
return false;
} else if (!currentRestrictions.allows($("#largo").val(), $("#ancho").val(), $("#calibre").val())) {
//hay un error de validacion
$("#invalidDimensionsDialog").dialog("open");
return false;
}
}
...
$("#aForm").submit(validateOnSubmit);
此(this?)代码的问题在于,如果它被取消(即通过到达返回false
语句),并且表单未提交,则下次通知表单提交时,此处理程序将执行,但即使未到达返回false
语句,也不会提交
我以前从未遇到过这种情况,我不希望您能找到解决方案(因为涉及大量代码)。然而,由于我使用的是一个框架,其中包含了一些样板文件,我问:
Q:是否有一种方法可以通过.submit处理程序列表进行迭代(调试)?调用
submit
超出了您的功能范围
好吧,那么
是否只需要在提交函数结束时对服务器执行ajax调用?Q:是否有一种方法可以迭代(调试)整个.submit处理程序列表 A:您可以使用Firefox进行此操作。在firefox调试器选项卡中,查看事件窗格。在这里,您可以在页面上找到所有由代码绑定的事件 来源:
如何调试-它为我工作并为实际问题提供资金通过事件处理程序列表(警告:在版本>=1.8中测试;我认为较低版本使用不同的方法): 假设您的对象是:
$(“一个选择器”)
您可以使用$。\u数据($(“aSelector”)[0],“events”)
获取处理程序,该数据返回以下格式的字典:{handlerName:handlerList},即handlerList
具有实际处理程序的函数
属性的处理程序对象列表
在这样的附加处理程序中有一个错误(这个问题的效果根本不重要,因为问题最终是关于如何调试处理程序的)。我不明白这有什么区别。提交调用是为了调用处理程序,如果我在处理程序中添加了,那么它永远不会被称为xD。true。。。我没有注意到它与您需要调用的功能相同,所以您的问题不是代码出了什么问题,而是如何确定它是否是绑定到元素的唯一提交事件,对吗?你可以检查其他绑定jQuery的事件,但是你不能检查由jQuery以外的东西绑定的事件。是的,这是我的问题。我想没有人能帮我,因为这是一个巨大的代码,我不能在这里发布。我有另一个建议来帮你调试它,但它根本不能回答您的问题,因为它采用了不同的路径,只是为了确保这个特定函数在有效时正确返回undefined。是您需要显式地执行ajax调用,还是表单操作设置正确?基本上,它是一个函数代理,在函数执行时记录有关函数的所有重要信息。您可以使用它来确认它实际上返回的是未定义的。否则,我建议使用Visual Event bookmarklet检查绑定事件。解释列出处理程序和使用调试器与我(至少)删除downvote.UndownVote之间的关系。这让我可以迭代jQuery处理程序?还是显示本机处理程序?请记住,本机处理程序不是用jQuery分配的处理程序,而是内部处理程序,它循环通过一种列表或链来保存我需要的实际处理程序。那个窗格是否显示了处理程序列表?(例如,分配给.submit事件的所有jquery处理程序)