在Jquery成功调用之后,需要自动单击事件

时间:2011-05-19 10:51:24

标签: jquery ajax click

在下面的代码中,成功后需要绑定点击,并且应该只在第一次点击时触发事件。

$(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.
    }
   });
});

请让我知道如何一键点击两个这样的事件。 现在,要执行我需要点击两次。

提前致谢...

3 个答案:

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