【问题标题】:Pass name in jQuery form submission在 jQuery 表单提交中传递名称
【发布时间】:2014-03-17 12:56:53
【问题描述】:

我不知道为什么下面的行不能正常工作:

$('form[name="updateNetwork"]').unbind('submit').submit();

我可以提交我的表单

$("form").unbind('submit').submit();

但是这样做不会传递表单的 name 属性,我的后端代码必须识别该属性才能正确处理表单提交。任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 表单是否有name 属性?
  • 请在 firebug 或 chrome 控制台中检查渲染的 html 以获取 name 属性及其值
  • @OscarPaz 提交按钮包含名称属性,即:。我试图将 name 属性放在 MVC 帮助器表单链接中,但它会将其作为 actionlink 的一部分而不是 name 属性附加到 url。

标签: javascript jquery forms submit


【解决方案1】:

您的页面中似乎只有一个表单,您尝试使用 jQuery 中的 name 属性选择它的唯一原因是 jQuery 会将表单的名称发送到服务器。

好吧,那行不通。一旦通过 jQuery 获得对表单的引用,使用哪个选择器就无关紧要了。如果您想要使用表单名称将name 参数发送到您的后端代码,请在表单内使用隐藏输入:

<input type="hidden" name="form-name" value="updateNetwork" />

然后,您可以通过任何方式获取对表单的引用。正如@anvlasop 所说,最好的方法是为您的表单提供id 属性。

已编辑

您以错误的方式创建 jQuery 表单对象。如果你有这个:

<input type="submit" name="updateNetwork" />

那么你不能这样做:

$('form[name="updateNetwork"]).submit();

我假设您在submit 事件的事件处理程序中调用此方法submit()。不要那样做!你应该做的是,只有在验证中出现错误时才取消preventDefault,否则让表单发送:

//Never do this:
$('form').bind('submit', function(e) {
    var valid;
    //code to validate
    e.preventDefault();

    if (valid) $('form').unbind('submit').submit();
 });

这样做:

$('form').bind('submit', function(e) {
   var valid;
   try {
       //code to validate
   } catch (error) {
       valid = false;
   }
   if (!valid) e.preventDefault();
});  

如果验证期间出现异常,这也将阻止发送表单。

【讨论】:

  • 我的想法和你在这个回复中提到的一样。但是,当我尝试将这样一个隐藏字段添加到我的 MVC 表单时,它会破坏 e.preventDefault();停止提交表单的操作,直到所有值都针对正则表达式成功测试以进行验证。
  • 可能是因为您正在遍历表单中的所有输入?您可能需要更改验证器。或者,如果submit 按钮中有name 属性... 是提交按钮updateNetwork 中的name 吗?
  • 是的,我正在遍历所有同名输入以验证每个字段的输入。我确实在提交按钮中有 name 属性,例如:。删除提交按钮中的名称属性并添加名称=“updateNetwork”的隐藏字段,仍然破坏了preventDefault(),但是在我的后端收到了带有“updateNetwork”名称属性的表单。这不是一个解决方案,因为这将允许用户在没有正确验证输入文本的情况下提交。
  • OscarPaz 感谢您的帮助,在您的帮助下我解决了这个问题。经过更多调试后,我发现 preventDefault() 阻止了表单的提交,但是我正在遍历两组不同的表单字段并将结果设置为相同的布尔值,因此如果第二组为真(即使第一组不是)它允许表单提交。我为每组输入创建了一个单独的布尔值,并检查两个布尔值是否都为真以允许提交。
【解决方案2】:

你可以给你的表单一个id。试试这样的 html 代码:

<form id='form_id'>
     //your form elements here...
</form>

然后,使用 jQuery,您可以像这样引用表单:

$("#form_id").unbind('submit').submit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2021-05-06
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2011-10-01
    • 2012-04-13
    相关资源
    最近更新 更多