在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()
这是可行的,但是,它提交的表单没有我搜索过的东西?它将提交表单中的所有输入字段,即将输入嵌套在表单中问题是输入字段在表单之外:(并且不能更改:(可能解决方案是创建一个输入元素,然后将其附加到表单中?这很有效,但是,它提交的表单没有我搜索的内容?它将提交表单中的所有输入字段,即将输入嵌套在表单中。问题是输入字段在表单之外:(这是无法更改的:(也许解决方案是创建一个输入元素,然后将其附加到表单中?