2011-06-05 48 views
1

我很難處理addEventListener「提交」形式。下面是該腳本:爲什麼表單提交的addEventListener不起作用?

<html> 
    <head> 
     <title>Testing Hehe</title> 
    </head> 
    <body> 
     <form action="" method="post"> 
      <input type="text" name="q" onclick="this.parentNode.submit();" /> 
      <input type="submit" value="Testing" /> 
     </form> 
     <script type="text/javascript"> 
      console.log(document.readyState); 
      window.onload = function(){ 
       console.log(document.readyState); 
       document.forms[0].addEventListener('submit',function(e){ 
        e.preventDefault(); 
       },false); 

       var form = document.createElement('form'); 
        form.method= "post"; 
       var input= document.createElement('input'); 
        input.type = "text"; 
        input.name = "test"; 
        input.addEventListener('click',function(){ 
        form.submit(); 
        },false); 
       form.appendChild(input); 
       var input2= document.createElement('input'); 
        input2.type = "submit"; 
        input2.name = "sbt"; 
       form.appendChild(input2); 
       form.addEventListener('submit',function(e){ 
        alert("test"); 
        e.preventDefault(); 
       },false); 
       document.body.appendChild(form); 
      } 
     </script> 
    </body> 
</html> 

<?php 
if($_POST){ 
    print_r($_POST); 
    exit; 
} 
?> 

從上面的腳本,我已經succeded時提交按鈕點擊殺表單提交事件,但是當我改變提交觸發其他部分,比如當文本框點擊,「提交」事件仍然直接發佈。 我不明白爲什麼它發生,如何解決這個問題..

感謝您的關注:-)你閱讀答題對我是很大的:-)

回答

0

而不是使用:

input.addEventListener('click',function(){ 
        form.submit(); 
        },false); 

你可以使用:

input.addEventListener('click',function(){ 
        input2.click(); 
        },false); 

只要確保在它之前移動var input2= document.createElement('input');

例子:http://jsfiddle.net/niklasvh/wcpx4/

+0

喜尼古拉斯,感謝那就是做工精細。但是當我們不使用提交按鈕,所以觸發器必須直接使用form.submit();我嘗試做其他示例,我認爲addEventListener無法綁定form.submit()方法,但它在我覆蓋窗體時起作用。 submit()with form.submit = function(e){e.preventDefault();嗯..它的混亂.. – Kadugedeboy 2011-06-05 13:35:45