在jQuery不工作的情况下提交表单?
我有一张表格,看起来像:在jQuery不工作的情况下提交表单?,jquery,Jquery,我有一张表格,看起来像: <form action="/Soeg.aspx" method="GET" id="searchFormHeader"></form> 但是,它从未进入submit(),这没有任何意义 您为表单提交提供了一个处理程序,但您从未实际提交过表单。电话: $jq('#searchFormHeader').submit(); 您已经为表单提交提供了处理程序,但您从未实际提交过表单。电话: $jq('#searchFormHeader').submi
<form action="/Soeg.aspx" method="GET" id="searchFormHeader"></form>
但是,它从未进入submit(),这没有任何意义 您为表单提交提供了一个处理程序,但您从未实际提交过表单。电话:
$jq('#searchFormHeader').submit();
您已经为表单提交提供了处理程序,但您从未实际提交过表单。电话:
$jq('#searchFormHeader').submit();
submit
函数非常类似于click
传递的参数是相应事件的事件处理程序。因此,在click事件的情况下,您似乎正确地确定了它,但您在该事件处理程序中所做的唯一事情是将事件处理程序附加到form.submit事件。您不会触发该事件
查看您的代码和问题,您似乎希望在单击按钮后提交表单。如果是这样,您可以将代码更改为下面的
if ($jq(".ie")) {
$jq('#searchFormHeader').submit(function () {
alert('Handler for .submit() called.');
return false;
});
$jq(".site-search-input").click(function () {
alert("clicked");
$jq('#searchFormHeader').submit();
});
}
我已将事件处理程序移到click事件之外,以避免反复附加与事件处理程序相同的函数(每次单击按钮)。
这将确保如果多次单击该按钮,则不会每次都将事件处理程序附加到提交事件
编辑
对于没有提交输入值的问题,有三种选择
- 如果希望支持IE8-,请将输入移动到表单内部。这将是我的首选,它很简单,可以消除整个问题
- 不使用提交,但使用$.post发回
- 克隆输入元素将其添加到表单中,并在提交后再次将其删除。我觉得这有点刻薄
var form,formId,data,url,id,
submit = function () {
//find the form of whatever activated the submitting
form = $(this).closest("form");
formId = form.attr('id');
//iterate all related input fields and collect the data
//note selects, textareas and checkbox/radiobuttons
//needs attention if those are also possible
data = {};
$jq("input[form="+formId + "]").each(function(){
id = this.attr('name') ? this.attr('name') : this.attr('id');
data[id] = this.val();
});
//find the url to post to
url = form.attr('action') ? form.attr('action') : windows.location;
//post the data to the server
//using your original submit event handler as callback
$jq.post(url,data,function () {
alert('Handler for .submit() called.');
});
return false;
}
//make sure they all have a form attribut
$jq("input").each(function(){
if(!this.attr('form')){
formId = this.closest("form").attr('id');
this.attr('form',formId);
}
}
//attach click event handler to the button
$jq(".site-search-input").click(submit.call(this))
.closest("form")
.submit(submit.call(this));
submit
函数非常类似于click
传递的参数是相应事件的事件处理程序。因此,在click事件的情况下,您似乎正确地确定了它,但您在该事件处理程序中所做的唯一事情是将事件处理程序附加到form.submit事件。您不会触发该事件
查看您的代码和问题,您似乎希望在单击按钮后提交表单。如果是这样,您可以将代码更改为下面的
if ($jq(".ie")) {
$jq('#searchFormHeader').submit(function () {
alert('Handler for .submit() called.');
return false;
});
$jq(".site-search-input").click(function () {
alert("clicked");
$jq('#searchFormHeader').submit();
});
}
我已将事件处理程序移到click事件之外,以避免反复附加与事件处理程序相同的函数(每次单击按钮)。
这将确保如果多次单击该按钮,则不会每次都将事件处理程序附加到提交事件
编辑
对于没有提交输入值的问题,有三种选择
- 如果希望支持IE8-,请将输入移动到表单内部。这将是我的首选,它很简单,可以消除整个问题
- 不使用提交,但使用$.post发回
- 克隆输入元素将其添加到表单中,并在提交后再次将其删除。我觉得这有点刻薄
var form,formId,data,url,id,
submit = function () {
//find the form of whatever activated the submitting
form = $(this).closest("form");
formId = form.attr('id');
//iterate all related input fields and collect the data
//note selects, textareas and checkbox/radiobuttons
//needs attention if those are also possible
data = {};
$jq("input[form="+formId + "]").each(function(){
id = this.attr('name') ? this.attr('name') : this.attr('id');
data[id] = this.val();
});
//find the url to post to
url = form.attr('action') ? form.attr('action') : windows.location;
//post the data to the server
//using your original submit event handler as callback
$jq.post(url,data,function () {
alert('Handler for .submit() called.');
});
return false;
}
//make sure they all have a form attribut
$jq("input").each(function(){
if(!this.attr('form')){
formId = this.closest("form").attr('id');
this.attr('form',formId);
}
}
//attach click event handler to the button
$jq(".site-search-input").click(submit.call(this))
.closest("form")
.submit(submit.call(this));
Jquery函数:
$jq(".site-search-input").click(function () {
alert("clicked");
$jq('#searchFormHeader').submit(function () {
alert('Handler for .submit() called.');
return false;
});
});
HTML元素:
<form action="/Soeg.aspx" method="GET" id="searchFormHeader">
<input type="submit" form="searchFormHeader" value="Søg" class="site-search-input"/>
</form>
Jquery函数:
$jq(".site-search-input").click(function () {
alert("clicked");
$jq('#searchFormHeader').submit(function () {
alert('Handler for .submit() called.');
return false;
});
});
HTML元素:
<form action="/Soeg.aspx" method="GET" id="searchFormHeader">
<input type="submit" form="searchFormHeader" value="Søg" class="site-search-input"/>
</form>
HTML代码:
<form action="#" method="POST" id="searchFormHeader">
<input type="submit" form="searchFormHeader" value="Søg" class="site-search-input">
</form>
HTML代码:
<form action="#" method="POST" id="searchFormHeader">
<input type="submit" form="searchFormHeader" value="Søg" class="site-search-input">
</form>
如果您想简化此解决方案,只需添加
.submit()代码>在指定处理程序之后。基本上:$(“#a”).submit(函数(){console.log(“某物”)}).submit()
如果您想简化此解决方案,只需添加.submit()代码>在指定处理程序之后。基本上:$(“#a”).submit(函数(){console.log(“某物”)}).submit()
这是可行的,但是,它提交的表单没有我搜索过的东西?它将提交表单中的所有输入字段,即将输入嵌套在表单中问题是输入字段在表单之外:(并且不能更改:(可能解决方案是创建一个输入元素,然后将其附加到表单中?这很有效,但是,它提交的表单没有我搜索的内容?它将提交表单中的所有输入字段,即将输入嵌套在表单中。问题是输入字段在表单之外:(这是无法更改的:(也许解决方案是创建一个输入元素,然后将其附加到表单中?