0

在 firebug 中调试时出现以下 javascript 错误:

'cities' is not a function. 

我想要实现的是动态选项,它曾经可以工作,这只是一个新版本的页面,它破坏了我需要恢复的旧功能。它是从 HTML 调用的:

<select name="w" onchange="cities(this);" id="searcharea_expanded" class="">

它在同一个文件中被声明为 javascript:

<script>
function cities(obj){

    if(obj.value == '3'){

         //undisplay cities options municipality_control2

        document.getElementById('municipality_control').style.display='none'

    }else{

        $('#cities').load('/cities?regionId='+obj.value);
    }
}  
}
</script>

那么为什么我会收到这个错误?我还有一个名为 citys 的 div,它是脚本应该更新的 div,它曾经可以工作:

<div id="cities" class="selectbox munics ">
     <select id="municipality_control" name="m">
         <option value="4691207">Madgaon</option>
         <option value="4695203">Mormugao</option>
         <option value="4692204">Panaji</option>
         <option value="4676203">Other city</option>
    </select>
</div>
4

3 回答 3

2

问题是您关闭的大括号比打开的多。如果您使用 jQuery,请使用它的函数。例如,而不是document.getElementById("id")使用$("#id").

您的代码将是:

<script>
    function cities(obj){
       if(obj.val() == '3'){
         // undisplay cities options municipality_control2
         // document.getElementById('municipality_control').style.display='none'
         $('#municipality_control').hide()
       } else {
         $('#cities').load('/cities?regionId='+obj.val());
       }
    }  
    // } << This has to be removed
</script>

我还建议您避免使用 Javascript 的 HTML 属性,例如onchange="...". 请改用以下内容:

$("#searcharea_expanded").on("change", function () {
     cities($(this));
});
于 2013-06-16T09:14:48.477 回答
1

好吧,假设这是从您的站点直接复制+粘贴,那么问题很简单:}脚本末尾有一个额外的右括号。这是一个语法错误,会使整个脚本块无效,这意味着永远不会定义函数。

如果你正确缩进你的代码,你会更容易注意到这种事情。此外,我建议使用像样的编辑器或 IDE 来编写代码,它会突出显示语法。例如,在 Netbeans 中打开代码会立即在相关行上放置一个错误标记,从而非常容易发现问题。

于 2013-06-16T08:48:00.207 回答
0

我可以看到至少三种可能性:

  • 你的函数在定义它的脚本被解释之前cities()被调用(可能是因为你)。验证在 HTML 之前打开和关闭。可能,通过 jQuery 添加侦听器而不是内联它。changeselect<script>onchange

  • Javascript 中有一个错误,导致cities声明根本无法执行。检查错误控制台或 Javascript 控制台或您的浏览器提供的任何东西以拦截 Javascript 错误。

  • 您的cities对象以某种方式被另一个对象覆盖cities(可能持有 jQuery 句柄cities div?)。

我根据自己的错误按可能性降序排列了可能性

于 2013-06-16T08:00:37.483 回答