0

为什么这个条件总是执行 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.......
});

谢谢大家。

4

3 回答 3

6

您实际上不能value在 HTML 选择元素上使用这样的方法——它有属性selectedIndex,但没有selectedValue。JQuery 确实val()在选择元素上实现,但是:

if ($("#analyses").val() == 'distance')

如果您使用直接的 Javascript 进行操作,那么您必须首先获取选定的索引,然后是option元素的值:

var sel = document.getElementById("analyses");
if (sel.options[sel.selectedIndex].value)

为了回答您的问题,使用原始代码,Javascript 将始终执行else分支,因为document.getElementById("analyses").valueis undefined,Javascript 在布尔语句中将其类型转换为“false”。

小提琴。

于 2012-12-05T23:42:14.883 回答
2

您的代码的结构方式只会在页面加载时运行一次 - 在这种情况下,选择的值将始终为空字符串。如果您希望它响应更改:

$("#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');
        });
     }
});
于 2012-12-05T23:46:43.207 回答
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/

于 2012-12-05T23:47:55.223 回答