由于某种原因,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不是函数
知道为什么这不起作用?
感谢。
答案 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