在下面的代码中,成功后需要绑定点击,并且应该只在第一次点击时触发事件。
$(this).click(function(){
var $obj = $(this);
var urlLink = someURL;
var data = "id=" + "123";
$.ajax({
url : urlLink,
data : data,
cache: false,
success : function(resp) {
$obj.bind("click",eval(someFunction)); //This someFunction will call another function.
}
});
});
请让我知道如何一键点击两个这样的事件。 现在,要执行我需要点击两次。
提前致谢...
答案 0 :(得分:1)
您的代码在触发前失败,因为未定义变量event
,您的函数在行event.stopPropagation()
处崩溃。另外,尝试在事件绑定中删除eval
,究竟是什么TRTP.showSourceToolTip
?
如果它是一个功能,您可以执行以下操作:
success : function(resp) {
// Bind the click event to a function
$obj.click(TRTP.showSourceToolTip);
// This will call the function in the context of the object's DOM element
TRTP.showSourceToolTip.apply($obj[0]);
}
<强>更新强>
更新代码的问题在于您将保持绑定点击事件。如果你在jQuery中绑定和事件,它将不会替换原始,但两个动作将按顺序触发。一旦有适当的响应,你可能想要unbind()
你的ajax处理程序。
下面的代码实际上会在请求发出后立即取消绑定ajax处理程序,以避免在响应之前重复单击。一旦ajax成功,它将绑定不同的处理程序,并触发其单击。如果ajax失败,它将绑定ajax处理程序,以便用户可以再试一次。
function ajaxHandler(){
var $obj = $(this);
var urlLink = someURL;
var data = "id=" + "123";
// Unbind the ajax handler to prevent re-fire before ajax request completes
$obj.unbind("click", ajaxHandler);
$.ajax({
url: urlLink,
data: data,
cache: false,
success: function(resp){
// Bind the new event handler
// Removed eval from the bind, put it back if you desperately need it
$obj.bind("click", someFunction);
// Fire click on Object
$obj.click();
},
error: function(){
// Put the ajax handler back so the user can try again if it fails
$obj.bind("click", ajaxHandler);
}
});
}
// This is where you first bind the ajax handler
// I'm not sure what scope you're in, make sure this references the desired object.
$(this).click(ajaxHandler);
答案 1 :(得分:0)
如果您的处理程序定义良好,请尝试:
$obj.click();
但是查看你的代码,我想我会完全重写它......
答案 2 :(得分:0)
看起来您动态获取工具提示文本并希望在ajax请求成功后显示它。为什么不呢:
success : function(resp) {
eval(TRTP.showSourceToolTip);
// Or:
TRTP.showSourceToolTip(resp);
}
什么是TRTP.showSourceToolTip?无论如何它看起来像一个函数,所以不需要eval。