1

onsubmit イベント ハンドラが false を返したときに、HTML ドキュメント要素を変更したいと考えています。

関数内validate()で Cookie が設定されます (ところで、Cookie よりも簡単な方法はありますか?)。

Onload イベント ハンドラーcheckIfFalseSubmit()は Cookie をチェックし、changeDocument()ドキュメントを変更する関数を実行します。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>How change document after false onsubmit without manual page reloading</title> 
<script type="text/javascript">
function validate() {
  // http://www.javascripter.net/faq/settinga.htm
  var today = new Date();
  var expire = new Date();
  expire.setTime(today.getTime() + 1000*5000);
  document.cookie = "cookie1=a; expires=" + expire.toGMTString();
  alert ("Always false - just for testing");
  return false;
}

function changeDocument() {
  myDiv.innerHTML = "Form validation failed"; 
} 

// http://stackoverflow.com/questions/10730362/javascript-get-cookie-by-name
function getCookie(name) {
  var parts = document.cookie.split(name + "=");
  if (parts.length == 2) return parts.pop().split(";").shift();
}

function checkIfFalseSubmit() {
  if ( getCookie("cookie1") == "a")
    changeDocument();
}
</script> 
</head>

<body onload="checkIfFalseSubmit()">
<div id="myDiv">Before Submit</div>

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" name="f" onsubmit="return validate();" > 
 <input type="text" name="myName" /><br/>
 <input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

問題は、onloadページを手動でリロードしたときにのみ発生することです。リロードしないとアラートが表示されますが、ドキュメントは変更されません。

私の目的のために onload の代わりに使用する必要がある別のイベントはありますか? 私の目標を達成する別の方法はありますか?

4

1 に答える 1

0

複雑すぎると思います。Cookie と body onload イベントを使用する必要はありません。validate()フォームの送信時に呼び出されchangeDocument()、メッセージを表示するだけです。

false を返す前にvalidate()検証に失敗した場合の呼び出しの内部。changeDocument()

于 2013-09-19T03:30:28.250 に答える