使用基于$ _POST值的if-else语句设置javascript变量

时间:2013-04-26 21:14:13

标签: php javascript variables if-statement undefined

我有一个包含单选按钮选项的表单,我想用它来指示一组变量的值。

单选按钮如下:

<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部分和第1部分第2部分显示为未定义。我在if-else之后使用了document.write(template,part1,part2)并确认它打印了option1undefinedundefined。

我在这里做错了什么?

解决

我需要更改的一般格式问题(正如几乎每个人都指出的那样):我需要先声明我的变量,然后从我在if-else语句中分配的变量中删除var关键字(part1 / part2)。

我还绕过

元素并直接在模板变量中传递回声。工作代码如下:

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

weather =“www.weather.com/”+ part1 +“ithink”+ part2;

谢谢,所有人 - 特别是cdhowie关于JS的说明不是块范围的。这让我疯了。

3 个答案:

答案 0 :(得分:0)

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

id不是样式的一部分。因此,您必须从

标记中删除它,否则将取消设置ID,$("#selection)将不会返回对象。所以使用上面的代码,它应该工作。

问候

答案 1 :(得分:0)

您需要在if / else

之外定义变量
var part1;
var part2;
if(template == 'option1'){
    part1 = "beautifulweather";
    part2 = "ishouldgooutside";
}

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

答案 2 :(得分: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与字符串不匹配),请考虑在调试时通过template显示alert(JSON.stringify(template))的值。可能(并且可能,给定您的标记)该字符串包含一些空格字符。我希望解决方案是将您的标记更改为:

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