我想保留按钮点击功能的参考,做我的东西,然后运行原始点击功能。
我知道我通常可以在document.ready中做这些事情,例如:
var originalOnClick = $("#myBtn").click;
$("#myBtn").click = function() {
// do my staff here, and only then call the original:
originalOnClick();
}
(如果错误,请更正此代码!)
但是,我有一个特例。在我的页面onLoad函数中,有异步的ajax调用。因此,在ajax代码完成之前,实际上会调用在document.ready上调用的函数。
有没有办法在调用click()或onclick()时更改click事件?我的意思是,是否有一个事件在点击事件之后立即被称为?
或者说我必须要求用户点击一个(我可以看到这个页面已加载)按钮,然后我才能做我的员工?
编辑1:ajax代码在包含的脚本中。我无法改变它。
编辑2:可能的解决方案:隐藏原始按钮,但使用其事件:
HTML:
<div class="object1" style="display: none;" >original button.</div>
<div class="object2">my button.</div>
JS:
function doMyStuff() {
alert(' doMyStuff .');
}
$(document).ready(function(){
$('.object1').click(function(){
alert('original staff. ');
}); // actually, this is just a test code. In my project, I cannot edit this function
$('.object2').click(function() {
doMyStuff();
$('.object1').click();
});
});
答案 0 :(得分:1)
您可以拥有一个click事件,然后将其自身作为事件处理程序删除,然后创建一个新的事件处理程序:
function doNormalStuffWithClick() {
}
//First click
$('#myBtn').click(function() {
// switch off this event handler
$(this).off('click');
// do stuff with first click
// ....
doNormalStuffWithClick();
// Set up handler for subsequent clicks
$("#myBtn").click(function() {
doNormalStuffWithClick();
});
}
答案 1 :(得分:0)
听起来您想要阻止用户在ajax功能完成之前单击您的按钮。有几种方法可以做到这一点。最简单的方法如下:
var ajaxCount = 0;
$.ajax('some/url', function(res){
ajaxCount++
// code here
});
$.ajax('some/url', function(res){
ajaxCount++
// code here
});
$('#myBtn').click(function(e){
if(ajaxCount != 2) return false;
// code here
});
在这种形式中,您只需检查以确保两个ajax函数都已触发。
答案 2 :(得分:0)
如果在完成AJAX请求之前绑定代码是个问题,可以在ajaxSuccess
上调用它:
$(document).ajaxSuccess(function () {
// do stuff
});
如果要在完成所有AJAX请求后执行某些操作,可以检查每个请求开始时可以设置的变量。您甚至可以尝试使用ajaxStart
更改当前请求的数量,然后在ajaxSuccess
$(document).ajaxStart(function () {
// do something
});