调用onclick一个覆盖的功能不起作用

时间:2018-03-10 16:32:22

标签: javascript jquery

我现在遇到某些代码有困难。我试着看看互联网和其他StackOverflow,但似乎没有一个对我有用......

我有一个函数(在不属于我的代码中定义,我无法手动更改)我试图正确覆盖它。对于某个按钮的每次单击,它应该调用新的覆盖函数,但它不起作用。它总是调用它的第一个版本。

事实上,遗憾的是我无法更改下面代码的顺序。

<script>
$('button').click(select_options);

function select_options(){
     // some TO DO here
}
</script>

在另一个我可以更改的文件中,我做了:

<script>
window.select_options = function() {
      // I redefine the function here as what I want
}
</script>

当我点击一个按钮时,它会调用函数“select_options”的第一个定义。如何通过在按钮上单击用户来正确修复和覆盖它将被调用的函数?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您需要取消绑定此特定事件处理程序并重新绑定新事件处理程序。你当然需要小心,不要删除其他处理程序。你应该这样做,例如:

$('button').off('click', select_options).on('click', function () {
  console.log('B')
})

以下是如何保留其他处理程序的演示:

&#13;
&#13;
$('button').click(select_options).click(function () {
	console.log('other handler')
})

function select_options() {
	console.log('A')
  
  // Remove original select_options and bind version B
  $('button').off('click', select_options).on('click', function () {
  	console.log('B')
  })
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button>Test</button>
&#13;
&#13;
&#13;