我现在遇到某些代码有困难。我试着看看互联网和其他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”的第一个定义。如何通过在按钮上单击用户来正确修复和覆盖它将被调用的函数?
感谢您的帮助
答案 0 :(得分:1)
您需要取消绑定此特定事件处理程序并重新绑定新事件处理程序。你当然需要小心,不要删除其他处理程序。你应该这样做,例如:
$('button').off('click', select_options).on('click', function () {
console.log('B')
})
以下是如何保留其他处理程序的演示:
$('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;