2011-01-19 121 views
1

我只是試圖提交一個簡單的表單到同一頁面,但是當它被提交時,它會在同一頁面上調用PHP函數。但是我在提交之前試圖做一些JavaScript驗證。所以我想知道在form標籤中使用onSubmit調用js函數和onClick調用js函數與按鈕之間有什麼區別。這是我目前正在嘗試做的。Javascript驗證

<?php 
    function tobecalled() 
    { 
    echo "This was run"; 
    } 
?> 
<html> 
    <head><title>Testing</title> 
    <script type="text/javascript"> 
    function testResults (form) 
    { 
     var TestVar = form.inputboxname.value; 
     if(TestVar == '') 
     return false; 
     else 
     return true; 
    } 
    </script> 
    </head> 
    <body> 
    <form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST" onSubmit="return testResults(this);"> 
     <input type="text" name="inputboxname" /> 
     <input type="submit" value="Save" name="submit" /> 
     <?php 
     if(isset($_POST['submit'])) 
     tobecalled(); 
     ?> 
    </form> 
    </body 
</html> 

它的工作原理..

但是,如果我做(提交通過JS)

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST"> 
    ... 
    <input type="submit" value="Save" name="submit" onClick="return testResults(this);"/> 
    ... 

它仍然調用PHP函數tobecalled() - 爲什麼?我期待它不會打電話。它是如何工作的?

+0

請重新格式化您的代碼。 – 2011-01-19 22:30:26

+0

您將得到更好的答案,格式良好的代碼和寫得很好的問題。 – 2011-01-19 22:31:27

+0

我已經把完整的工作代碼..很好地重述了在窗體和onClick中使用onSubmit和按鈕之間的區別...? – Vinay 2011-01-19 22:34:32

回答

-1

因爲無論您是將javascript添加到表單的onsubmit還是submit按鈕的onclick中,表單仍將通過提交按鈕提交。這意味着一個請求被髮送回服務器,$ _POST ['submit']將被設置。由於該變量已設置,因此您可以找到正在調用的函數。

2

它允許它通過的原因是因爲你在onclick事件中傳遞了this。在這種情況下,this指的是提交按鈕而不是函數所需的表單。

因此form.inputboxname.value返回undefined它不是''(空字符串),因此testResults函數返回true。所以提交被激活。

1

區別是thisthis指向onClick中的另一個對象,而不是onSubmit。你的函數期望一個表單被傳遞,但是當你使用onClick時,你給它提交按鈕。這就是爲什麼第二種方法無法按預期工作。