JavaScript错误:未捕获的TypeError:foo不是函数

时间:2016-04-26 19:38:23

标签: javascript jquery html

由于某种原因,JavaScript似乎无法识别我的功能。

我在某个HTML中有一个按钮:

<button type="button" class="btn btn-default" id="lightOn" onclick="lightOn()">On</button>

然后是一点JavaScript:

function lightOn(){
    $("#lightOn").addClass("active");
    $("#lightOff").removeClass("active");
    socket.emit("setting", {"light":"on"});
}

当我点击按钮时,我收到错误:

  

未捕获的TypeError:lightOn不是函数

知道为什么这不起作用?

感谢。

3 个答案:

答案 0 :(得分:4)

问题是您为元素提供了相同的ID:"lightOn"。在此范围内,lightOn是影响函数(read more)的元素。

一个简单的解决方案是为元素提供不同的id或为函数指定不同的名称。

更好的方法是将脚本与HTML分开:

<button type="button" class="btn btn-default" id="lightOn">On</button>

$(function(){
    $('#lightOn').click(function() {
        $("#lightOn").addClass("active");
        $("#lightOff").removeClass("active");
        socket.emit("setting", {"light":"on"});
    });
});

答案 1 :(得分:2)

不是使用update action model = case action of ScatterPoints pts -> -- List (Int, Int) ScatterPlot pts LogPoints pts -> LogData pts ... 属性,而是在JavaScript中添加事件监听器更加清晰,如下所示:

onclick
$('#lightOn').on('click', function() {
  $("#lightOn").addClass("active");
  $("#lightOff").removeClass("active");
  socket.emit("setting", {"light":"on"});
});

答案 2 :(得分:2)

试试这个:

var lightOn = function(){

}

你可以用vanilla JS完成所有这些,而不是使用jQuery:

var lightOn = function(){
    document.getElementById('lightOn').className += " active";
    document.getElementById('lightOff').className.replace(/\bactive\b/,'');
    socket.emit("setting", {"light":"on"});
}

var lightOn = function()function lightOn()的一个很好的解释可以在这里找到:https://stackoverflow.com/a/336868/1887101