我有一段javascript,它对form.php上的webform进行了多次操作。表单设置为action="form.php"
,因此在提交时加载自身。 webform仅构建if (!isset($_POST['submit']))
,因此在发布后,构成webform的输入元素和容器不存在。这通常是代码的结构:
<?php if (!isset($_POST['submit'])) {
//the form has not been submitted
?>
<form action="<?php $_SERVER['PHP_SELF']?>" method="post" id="form" name="form">
<!-- general input elements -->
<input type="submit" name="submit" value="Send">
</form>
<?php }
else {
// the form has been submitted
// posted values are submitted to a database
}
?>
但是javascript仍然会尝试对这些元素进行操作。由于这些不再存在,因此会发生错误。我可以使用一堆if (HTMLElement)
语句来处理某个HTMLElement的每个操作,但我希望有一个更坚实,更通用的解决方案。
鉴于表单提交到其页面并且在POSTing之后不能简单地继续显示表单,您是否有建议如何检测webform的POST并关闭我的javascript的某些部分?
更普遍的问题是:
如何通过javascript检测php POST?
答案 0 :(得分:2)
有一件事是这样的:
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') $isPost = true; ?>
// later on in your script
<?php if (!$isPost): ?>
<script type="text/javascript">
// the JS code that manipulates your form
</script>
<?php endif; ?>
基本上,如果表单已发布,请不要呈现操纵它的JS代码。如果该代码与您总是想要包含的其他代码混合在一起,那么您将不得不以不同的方式工作。在这种情况下,您可以尝试:
<script type="text/javascript">
var isPost = <?php echo $isPost ? 'true' : 'false' ?>;
if (!isPost) {
document.getElementById('blah').doSomething();
}
</script>