2

私の状況

form.php の Web フォームでいくつかの操作を行う JavaScript があります。フォームは に設定されaction="form.php"ているため、送信時にフォーム自体が読み込まれます。Web フォームはビルドされるだけif (!isset($_POST['submit']))なので、投稿後、Web フォームを構成する入力要素とコンテナーは存在しません。これは一般的にコードがどのように構成されているかです:

<?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 は依然としてこれらの要素を操作しようとします。これらはもう存在しないため、エラーが発生します。特定の HTMLElement を操作するたびに一連のステートメントを使用することもできますif (HTMLElement)が、より確実でより一般的な解決策があることを願っています。

質問

フォームがそのページに送信され、POST 後にフォームを単に表示し続けるオプションではないことを考えると、Web フォームの POST を検出して JavaScript の特定の部分をシャットダウンする方法を提案してもらえますか?

より一般的な質問は次のとおりです。

javascriptでphp POSTを検出するにはどうすればよいですか?

4

1 に答える 1

2

1つ気になるのは、次のようなものです。

<?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>
于 2012-08-03T22:27:52.473 に答える