我一直在尝试找出是否可以动态更改
oldjsfile.js
$(document).ready(function(){
console.log('旧文件已加载');
$('#action')。click(function(){
警报('旧');
});
});
newjsfile.js
$(document).ready(function(){
console.log('新文件已加载');
$('#action')。click(function(){
alert('new');
});
});
在更改javascript文件之前,点击 #action
会显示1条“旧”警报。更改脚本后,单击 #action
,我将收到“旧”警报和“新”警报。有没有一种方法可以“卸载”先前的文件,以便删除/不执行原始的 click
函数?
我正在寻找除更改ID或编辑脚本之外的解决方案。我认为这是不可能的,因为脚本已在内存中。
答案 0 :(得分:1)
那是不可能的。它已经加载并正在运行。您应该考虑使用.on
和.off
绑定到click
事件。
答案 1 :(得分:1)
开始时,您绝对不希望加载和卸载脚本,因为这会导致其他问题,因此加载脚本应异步进行。
对于您的第一个事件,您一切都很好。
对于第二个事件,它必须在其他事件发生时发生。在下面的代码段中,我创建了另一个按钮,当单击该按钮时,它取消了旧事件并添加了新事件。单击按钮并不一定要发生这种情况,它可以在任何事情上发生,但您必须使用unbind
删除旧事件并像原来一样创建一个新事件。
要尝试以下示例,请单击第一个按钮,您将看到“旧”警报。然后单击第二个按钮,然后再次单击第一个按钮,您将看到“新”。
$(document).ready(function () {
// The original click event.
$('#action').click(function () {
alert('old');
});
// Let's set up a reference to our new button which will cause the #action click to change.
$('#changeAction').click(function () {
// Unbind the previous click event associated with #action:
$('#action').unbind('click');
// Create the new click event.
$('#action').click(function () {
alert('new');
});
});
});
<button id="action">Click</button>
<button id="changeAction">Click me to change the action of the first button</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>