元の質問: 非常に単純な JavaScript の問題に頭を悩ませていました。解決策を探しましたが、スクリプトが機能しているように見えることを除いて、誰もが私と同じことをしています。関数内の if ステートメントのスコープが関数のスコープと異なることに気付きましたが、それを理解できないようで、解決策を見つけることもできません:/
<head>
<script type="text/javascript">
var globalch = 1;
function chk()
{
if(chicken){
globalch = 3;
}else{
globalch = 3;
}
}
</script>
</head>
<body>
<a href="#" onclick="alert(globalch)">What is the variable?</a><br />
<a href="#" onclick="chk">Change the variable to 3</a>
</body>
これは、言われているとおりに行うことを意図していますが、そうではありません。if ステートメントはどちらの条件でも同じことを行うので、問題ありません。また、window.globalch、window['globalch']、およびその他の提案を使用してみましたが、役に立ちませんでした。私は何が欠けていますか?きっとそれは当たり前のことで、そのうちの1つになると思います。瞬間..ありがとう人々!
編集:
これは範囲の問題ではないことに気付いたので、この質問を編集しました。これは今でははるかに深いものです。何らかの理由で、関数checkdetails(); 完全に正常に動作しますが、グローバル変数 done を変更しようとしても何も起こりません。スクリプトは次のとおりです。
<script type="text/javascript">
var done = "false";
function checkdetails(done){
var name = document.getElementById("name").value;
var address = document.getElementById("address").value;
var postcode = document.getElementById("postcode").value;
var city = document.getElementById("city").value;
var number = document.getElementById("number").value;
var email = document.getElementById("email").value;
if(name==""){
noty({text: "You need to enter your name."});
}else if(!address){
noty({text: "You need to enter your address."});
}else if(!city){
noty({text: "You need to enter your city."});
}else if(!postcode){
noty({text: "You need to enter your postcode."});
}else if(!number){
noty({text: "You need to enter your contact number."});
}else if(!email){
noty({text: "You need to enter your email address."});
} else {
done="true";
noty({text: "Your details have been submitted!"});
}
}
function payp(done){
if(done="false"){
noty({text: 'Please submit your details before proceeding to pay.'});
} else {
document.goandpay.submit();
}
}
関数を呼び出すオブジェクトは次のとおりです。
<a href="#" id="paypalpay" onclick="payp()">
<img src="images/paypalpay.png" style="margin-bottom:5px" alt="Proceed to the paypal payment gateway" name="Image1" width="265" height="53" border="0" id="Image1" />
</a>
どちらの関数も完全に正常に呼び出され、フォーム チェックが機能し、すべてが「送信」されると通知が表示されます。単一の問題は、変数done が変更されていないという事実です。これまでご協力いただきありがとうございました。一体どこで私が間違っているのか、誰にもわかりますか?