我有一个包含单选按钮选项的表单,我想用它来指示一组变量的值。
单选按钮如下:
<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的说明不是块范围的。这让我疯了。
答案 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>