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;

然后,我将此 URL 传递给一个具有空 href 的按钮,其中包含以下几行:

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

但是,每当我单击链接时,第 1 部分和第 2 部分显示为未定义。我在 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/”+第1部分+“ithink”+第2部分;

谢谢大家 - 特别是 cdhowie 关于 JS 不是块作用域的说明。那让我发疯了。

4

3 回答 3

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

id 不是样式的一部分。所以你必须从

标记,否则 id 未设置并且$("#selection)不会返回对象。所以使用上面的代码,它应该可以工作。

问候

于 2013-04-26T21:20:35.167 回答
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;

解决前两个问题:

$(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;

要解决第三个问题(template不匹配任一字符串) ,请考虑在调试时显示templatevia的值。alert(JSON.stringify(template))字符串可能(并且很可能,给定您的标记)包含一些空白字符。我希望解决方案是将您的标记更改为:

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