2011-01-19 73 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时,你给它提交按钮。这就是为什么第二种方法无法按预期工作。