【问题标题】:JS Submit not the same as HTML SubmitJS 提交与 HTML 提交不同
【发布时间】:2013-06-21 13:00:55
【问题描述】:

我有一个需要提交的表单,现在出于设计原因,我不得不重新定位提交这些表单的代码并使用 JS 来实际提交它们。

这一直很好,没有问题,直到我找到了一个表单,它也可以进一步处理不再触发的 JS...

我的提交JS如下:

function submitform()
{
    document.details.submit();
}   

这很好用。然而,这是另一个在使用 HTML 按钮时起作用的 JS:

$('form').submit(function(){
    $('#sortdata').val($( "#sortable" ).sortable("serialize"));
    return true;
}); 

任何帮助/建议都会很棒,因为我只是在循环中更改 JS 中元素的名称。这肯定有可能不是吗?

【问题讨论】:

  • 您发现有什么不同?检查您的网络标签以查看发布的内容!
  • 你引用了 jQuery 吗?第二个例子使用它
  • 我确实让 JQuery 参与了这一切,JQuery 可排序吗?它没有从可排序列表中获取排序,因此会擦除所有值。

标签: javascript jquery html


【解决方案1】:

使用 jQuery 提交方法来触发 jQuery 附加的事件处理程序:

$(document.details).submit(); //shorthand for .trigger('submit')

Demo

这将以相同的方式提交表单,但也会在提交之前触发使用 jQuery 绑定到该元素的 submit 事件处理程序。


问题是本机 HTMLFormElement.submit() 方法不保证触发与 jQuery 绑定的事件处理程序(或任何事件处理程序):

从基于 Gecko 的应用程序调用此方法时,不会触发表单的 onsubmit 事件处理程序(例如,onsubmit="return false;")。一般来说,它不保证被 HTML 用户代理调用。

另一方面,jQuery 的 .submit()/.trigger('submit') 将始终¹执行通过 jQuery 附加到该元素的事件处理程序。


¹ 除非之前为给定事件调用了 event.stopImmediatePropagation(),但这是一个完全不同的主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-27
    • 2012-07-18
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多