脚本错误:'c不是函数'

时间:2013-06-16 05:46:56

标签: html javascript

我在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>

3 个答案:

答案 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句柄?)。

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