0

一連の変数の値を指示するために使用したいラジオ ボタン オプションを含むフォームがあります。

ラジオボタンは次のとおりです。

<table style="width:90%">
<tr><td><input type="radio" id="opt1" name ="selectOpt" value="option1"
checked="checked"/> Option 1</td><td><input type="radio" id="opt2" name ="selectOpt"
value="option2"/> Option 2</td></tr>
</table>

ラジオボタンの値をエコーすることができます

<p id="selection">
<?php echo $_POST["selectOpt"];?></p>

したがって、変数が引き継がれていることは確かです。$_POST 値を要素に渡して、ユーザーがどの値が選択されたかを確認できるようにしているので、要素 ID を使用して if-else ステートメントの値を取得することにしました。

これが私の if-else ステートメントの外観です。

$(document).ready(function () {
var template = $("#selection").text();

if(template == 'option1'){
var part1 = "beautifulweather";
var part2 = "ishouldgooutside";
}

else if(template == 'option2'){
var part1 = "isthatrain";
var part2 = "imstayinginside";
}

weather = "www.weather.com/" + part1 + "ithink" + part2;

次に、次の行を含む空の href を持つボタンにこの URL を渡します。

var a = document.getElementById('weatherbtn');
a.href = weather;

ただし、リンクをクリックするたびに、part1 と part2 が未定義として表示されます。if-else の後に document.write(template, part1, part2) を使用し、option1undefinedundefined が出力されることを確認しました。

ここで何が間違っていますか?

解決した

変更が必要な一般的なフォーマットの問題 (ここにいるほぼ全員が指摘しているように): 最初に変数を宣言し、if-else ステートメント (part1/part2) で割り当てられている変数から var キーワードを削除する必要がありました。

私もバイパスしました

要素を作成し、エコーをテンプレート変数に直接渡しました。作業コードは次のようになります。

$(document).ready(function (){
var part1, part2, template;
var template = '<?php echo $_POST["selectOpt"];?>';

if(template == 'option1'){
part1 = "beautifulweather";
part2 = "ishouldgooutside";
}

else if(template == 'option2'){
part1 = "isthatrain";
part2 = "imstayinginside";
}

天気 = "www.weather.com/" + part1 + "ithink" + part2;

みなさん、特に cdhowie さん、JS がブロック スコープではないというメモをくれてありがとう。それは私を夢中にさせていました。

4

3 に答える 3

0

if/else の外で変数を定義する必要があります

var part1;
var part2;
if(template == 'option1'){
    part1 = "beautifulweather";
    part2 = "ishouldgooutside";
}

else if(template == 'option2'){
    part1 = "isthatrain";
    part2 = "imstayinginside";
}
于 2013-04-26T21:21:46.533 に答える
0

ここに私が見る問題があります:

$(document).ready(function () {
    var template = $("#selection).text();
    //                          ^
    // Missing closing quote mark

    if(template == 'option1'){
        var part1 = "beautifulweather";
        var part2 = "ishouldgooutside";
    }

    else if(template == 'option2'){
        var part1 = "isthatrain";
        var part2 = "imstayinginside";
        // Duplicate definition of variables.  JavaScript is not block-scoped.
    }

    // It's possible that the template variable does not match either string.
    // Therefore, the part1 and part2 variables might not be assigned here.

    weather = "www.weather.com/" + part1 + "ithink" + part2;

最初の 2 つの問題を修正するには:

$(document).ready(function () {
    // Always declare variables first!
    var template, part1, part2;

    template = $("#selection").text();
    // Add quote mark       ^

    if(template == 'option1'){
        // Remove "var" keyword.
        part1 = "beautifulweather";
        part2 = "ishouldgooutside";
    }

    else if(template == 'option2'){
        // Remove "var" keyword.
        part1 = "isthatrain";
        part2 = "imstayinginside";
    }

    weather = "www.weather.com/" + part1 + "ithink" + part2;

3 番目の問題 (どちらの文字列とも一致しない) を修正するには、たとえば、デバッグ中templateに via の値を表示することを検討してください。文字列に空白文字が含まれている可能性があります (マークアップを考えると)。解決策は、マークアップを次のように変更することだと思います。templatealert(JSON.stringify(template))

<p id="selection"><?php echo $_POST["selectOpt"];?></p>
于 2013-04-26T21:22:03.287 に答える