我在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>
那我为什么会收到此错误?我还有一个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>
答案 0 :(得分: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>
我还建议您阻止使用像onchange="..."
这样的Javascript的HTML属性。请改用以下内容:
$("#searcharea_expanded").on("change", function () {
cities($(this));
});
答案 1 :(得分:1)
好吧,假设这是您网站的直接复制+粘贴,那么问题很简单:您在脚本末尾有一个额外的右括号}
。这是一个语法错误,会使整个脚本块无效,这意味着永远不会定义该函数。
如果你正确地缩进你的代码,你会更容易注意到这种事情。另外,我建议使用一个不错的编辑器或IDE来编写代码,这会进行语法突出显示。例如,在Netbeans中打开代码会立即在相关行上添加错误标记,从而可以非常轻松地查看问题。
答案 2 :(得分:0)
我至少可以看到三种可能性:
在解释定义它的脚本之前调用cities()
函数(可能是因为change
select
)。验证<script>
是否在HTML之前打开和关闭。可能通过jQuery添加onchange
监听器而不是内联它。
Javascript中出现错误,导致cities
声明完全无法执行。检查错误控制台或Javascript控制台或浏览器提供的任何内容,以拦截Javascript错误。
您的cities
个对象被另一个cities
以某种方式覆盖(可能持有cities
div
的jQuery句柄?)。
我根据我的自己的错误,按可能性降序排列了可能性。