如何使用 jQuery Ajax 指定正确的输入以提交多个表单(可变编号)
How to specify correct input using jQuery Ajax to submit multiple forms (variable number)
我有一个包含多个表单的网页。表单是动态生成的,表单数量各不相同。
我正在使用jQuery AJAX在不刷新页面的情况下提交表单,但它没有为某些表单提交正确的信息。我遇到的问题是jQuery似乎只从页面上的第一个表单中获取信息。因此,如果第一种形式有<input value="sentence A" name="sentence">
,那么"句子A"将作为所有表格的句子提交,即使页面上的其他表单应该有不同的句子与之关联。
我见过一些涉及使用表单ID的多形式jQuery解决方案,但我认为我不能使用ID,因为表单是生成的并且数量各不相同。
任何建议将不胜感激!下面提供了我的jQuery和一个示例表单html。
我正在使用以下jQuery提交页面上的表单(基于本教程)
$(document).ready(function() {
$(".button").click(function() {
var gene1 = $.trim( $("input.gene1").val() );
var gene2 = $.trim( $("input.gene2").val() );
var sentence = $.trim( $("input.sentence").val() );
var suggested_label = $.trim( $("input.suggested_label").val() );
var dataString = 'gene1='+gene1 + '&gene2=' + gene2 + '&sentence=' +
sentence + '&suggested_label=' + suggested_label;
$.ajax({
type : "POST",
url : "/submit_label",
data : dataString,
success : function(){
alert(dataString);
}
});
return false;
});
});
我的表单如下所示。在给定页面上,句子和suggested_label的表单内容会有所不同。
<form action="" name="label_form">
<input value=" 5058 " name="gene1" type="hidden" class="gene1">
<input value=" 8411 " name="gene2" type="hidden" class="gene2">
<input value="To further demonstrate..." name="sentence" type="hidden" class="sentence">
<div class="textbox">
<input placeholder="Suggested Label" name="suggested_label" type="text" class="suggested_label">
</div>
<div>
<button class="button">Submit</button>
</div>
</form>
这里的问题是你有几个输入类gene1
,几个输入类gene2
,等等......如前所述,当您调用$("input.gene1").val()
时,jQuery 返回与类gene1
的第一个匹配input
的值。
此处要选择类gene1
最接近单击的按钮的input
。您可以通过从按钮开始并访问 DOM 结构来实现它
例如,在代码中,将
var gene1 = $.trim( $("input.gene1").val() );
跟
var gene1 = $.trim( $(this).parent().siblings("input.gene1").val() );
以此类推,用于其他输入
suggested_label输入需要额外的工作,因为它是嵌套的:您可以使用 children()
方法:
var suggested_label = $.trim($(this).parent().siblings("div").children("input.suggested_label").val());
注意:$(this)
表示此上下文中单击的按钮
这是一个完整的示例
我认为从
概念上讲,解决方案如下:
- 循环浏览页面上的表单(使用
$('form').each( function(){ ... })
) - 保留一个计数器来动态地为每个表单分配一个 ID(设置一个变量,如
var formNum = 0
然后在表单循环中的每次迭代中添加它,如:formNum++
) - 然后,做
.attr('id','ajax_form_' + formNum)
- 现在,您可以引用每个特定表单的字段:
$('#ajax_form_' + formNum + ' input[name="sentence"])...
如果您需要有关如何执行此操作的更多指导,请告诉我!
相关文章:
- HTML表单提交时未执行外部函数
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 将图像上传ajax与表单提交ajax相结合
- Javascript无法处理表单提交
- 如何在我的情况下禁用表单提交
- 加载后的页面与ajax表单提交不起作用
- angularjs-控制器在表单提交时未调用
- 禁用带有字符白名单的表单提交
- 如何使用Google Analytics跟踪表单提交
- 使用javascript将表单提交到iframe目标中
- e.preventDefault在表单提交时被忽略
- AngularJS JQuery Ajax表单提交等效
- JavaScript表单提交帮助
- PHP表单提交和重定向
- 当所有输入文本字段都为空时,禁止表单提交,但当jquery中的任何字段不为空时允许提交
- setTimeOut AFTER jQuery表单提交
- 从函数中选择要触发表单提交的正确元素
- JavaScript表单提交没有't fire asp服务器端点击功能的提交按钮
- 表单提交问题,如何在我的URL末尾获得ID的值
- Javascript使用Confirm取消表单提交