使用jQuery

时间:2018-09-27 02:24:02

标签: javascript jquery

我一直在尝试找出是否可以动态更改

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或编辑脚本之外的解决方案。我认为这是不可能的,因为脚本已在内存中。

2 个答案:

答案 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>