嵌入脚本时,单击标题可在hello / goodbye之间切换。当代码在外部脚本中时,为什么它仅适用于两次单击?
嵌入式案例:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<h1 id="title" onclick="sayGoodbye();"> Hello </h1>
<script type="text/javascript">
function sayGoodbye() {
console.log("goodbye");
$("#title").html("Goodbye");
$("#title").click(function() {
$("#title").html("Hello");
$("#title").off("click");
});
};
</body>
</script>
外部案例:
<html>
<head>
<meta charset="UTF-8">
<title>Jquery click</title>
</head>
<body>
<h1 id="title"> Hello </h1>
<script src="jquery.js"></script>
<script src="click.js"></script>
</body>
</html>
这是click.js:
function sayGoodbye() {
console.log('goodbye');
$('#title').html('Goodbye');
$('#title').click(function () {
console.log('hello');
$('#title').html('Hello');
$('#title').off('click');
});
}
$(function(){$('#title').on('click', sayGoodbye);});
答案 0 :(得分:2)
在第二个示例中,SELECT CONCAT("Create Table `db_new`.`", TABLE_NAME, "` LIKE `db_old`.`default` ;") as MySQLCMD FROM TABLES where TABLE_SCHEMA = 'db_old'
将取消注册两个事件处理程序。来自the docs:
如果提供了一个简单的事件名称,例如“click”,那么该类型的所有事件(直接和委派)都将从jQuery集中的元素中删除。
在你的第一个例子中,这不是问题,因为你自己内联第一个处理程序,而不是通过jQuery的API。
对这种情况更简洁的解决方案是简单地连接单个处理程序并维护/切换其状态:
.off
在事件中(没有双关语)你需要只为一次调用挂钩一个事件处理程序,不要忘记one
也存在。