为什么这种情况总是执行ELSE而不是IF分支。这是javascript:
$(document).ready(function(){
if (document.getElementById("analyses").value == 'distance'){
loadScript('/static/distance.js', function()
{
console.log('done loading');
});
}else{
loadScript('/static/geoClusters.js', function()
{
console.log('done loading');
});
}
});
表单有几个具有不同选项值的选择标记:
<select name="analysis" id="analyses">
<option value="" disabled="disabled" selected="selected">Select Analysis</option>
<option value="distance">distance</option>
<option value="clustered">clustering</option>
</select>
我看不出if-else语句有什么问题。
由于
修改
感谢所有伟大的建议,我认为代码的结构方式与@trebuchet建议的方式相同:
$("#analyses").bind("change",function(){
.............code.......
});
谢谢大家。
答案 0 :(得分:6)
您实际上无法在HTML select元素上使用value
- 它具有属性selectedIndex
,但不具有selectedValue
。但是JQuery确实在select元素上实现了val()
:
if ($("#analyses").val() == 'distance')
如果您使用直接Javascript进行操作,则必须首先获取所选索引,然后获取option
元素中的值:
var sel = document.getElementById("analyses");
if (sel.options[sel.selectedIndex].value)
要回答您的问题,使用原始代码,Javascript将始终执行else
分支,因为document.getElementById("analyses").value
是undefined
,Javascript在布尔语句中强制转换为“false”。
答案 1 :(得分:2)
您的代码的结构方式只会在页面加载时运行一次 - 在这种情况下,select的值将始终为空字符串。如果您希望它响应更改:
$("#analyses").bind("change",function(){
if (document.getElementById("analyses").value == 'distance'){
loadScript('/static/distance.js', function()
{
console.log('done loading');
});
}else{
loadScript('/static/geoClusters.js', function()
{
console.log('done loading');
});
}
});
答案 2 :(得分:1)
在document.ready触发时,分析的值始终为“”,因为这是默认选择的选项。我不确定,因为第一个选项被禁用,为什么会发生这种情况,但显然正是发生了什么。
如果您将默认选定的选项值更改为“距离”,那么它会触发您可以在此处看到:
<select name="analysis" id="analyses">
<option value="" disabled="disabled">Select Analysis</option>
<option value="distance" selected="selected">distance</option>
<option value="clustered">clustering</option>
</select>
我也在这里发布了一个测试:http://jsfiddle.net/BKD4u/