2012-01-15 59 views
0

我有一个表格:jQuery的阿贾克斯张贴到自身,而不是脚本

<form name="emailform" id="emailform" onsubmit="emailSubmit()" method="post"><div> 
     <input type="text" id="email" name="email" value=""> 
     <input class="btn" type=submit value="Submit"></div> 
      </form> 

这里的emailSubmit():

function emailSubmit(){ 
     $.ajax({ 
         type: "POST", 
         url: "mysitesip/addemail.php", 
         data: { 
          email: $("#email").val() 
         }, 
         success: function (data) { 
          $('#success').html(data); 

         } 
        }); // end Ajax  
    } 

当我点击提交布通,它的帖子,用电子邮件地址作为参数,自己,而不是addemail.php,并刷新页面?这是为什么发生?如果我摆脱了method =“post”,那么表单会向自己发出一个GET请求,但会以正确的电子邮件作为参数。这对我来说非常混乱,因为.ajax方法明确指出类型是POST。为什么要改变表单的“方法”来改变emailSubmit()的发布?

.ajax调用是从另一个我的页面上非常相似的用法逐字采取的,它工作正常。

(当我说“这是投稿”或“这是歌厅”,我使用萤火看到这些东西)

回答

4

你什么都不做,取消标准形式提交。最终的结果是Ajax的东西提交给您指定的URI,然后表单作为正常提交(因为您忘记了action属性,因此当前页面的URI)。

  1. 停止使用内部事件属性(即onsubmit属性)
  2. 使用JS event binding代替
  3. prevent the default submit action
  4. 请确保您有一个动作属性以合理的地方指着因此,如果JS失败了任何理由,该表格仍然有效。 C.F. Unobtrusive JavaScript

或者,作为一个快速和肮脏的黑客... return falseonsubmit属性的末尾。

+0

我这样做:$(“#emailform”)。提交( \t \t \t function emailSubmit(){...});包括以返回false结束函数。并摆脱了onsubmit属性。但没有任何改变。为什么? – 2012-01-15 23:55:21

+0

(与此同时,我刚刚返回了onsubmit,这对其他人也有这个问题), – 2012-01-16 00:18:08

1

您需要返回false,这样的形式不提交,并在处理程序返回值:

onsubmit="return emailSubmit()" 

和:

function emailSubmit(){ 
    $.ajax({ 
        type: "POST", 
        url: "mysitesip/addemail.php", 
        data: { 
         email: $("#email").val() 
        }, 
        success: function (data) { 
         $('#success').html(data); 

        } 
       }); // end Ajax  
    return false; 
} 
+1

这是行不通的。事件处理程序不会对来自'emailSubmit'函数的返回值做任何事情。 – Quentin 2012-01-15 23:36:12

+0

你说得对,看得太快。酌情编辑。 – glortho 2012-01-15 23:40:40

1

http://www.w3schools.com/html/html_forms.asp - “一个提交按钮用于发送表单数据到服务器。“

我要做的就是以下 -

<form name="emailform" id="emailform" method="post"><div> 
    <input type="text" id="email" name="email" value=""> 
    <input class="btn" type=button onclick="emailSubmit()"></div> 
</form> 

编辑,如指出我原来的帖子将无法正常工作。我应该发的帖子 -

<form name="emailform" id="emailform" ><div> 
    <input type="text" id="email" name="email" value=""> 
     </div> 
</form> 
<input class="btn" type=button onclick="emailSubmit()"> 

我只是证实按下回车不会做一个提交,答案是我目前的基本代码一致。

+0

按文本输入中的回车将仍然正常提交表单。这太脆弱了。 – Quentin 2012-01-15 23:36:56

+0

你是对的。我复制得太快了。我不使用方法属性 – 2012-01-15 23:42:23

+0

添加方法属性不会停止输入提交表单的文本输入。 – Quentin 2012-01-15 23:43:25