Jquery第二次点击Fire事件第一次丢失

时间:2011-05-19 14:38:49

标签: jquery ajax events click position

首先,点击一个链接将有一个ajax调用,一旦它返回成功,将调用另一个函数...

//First Call
$(this).click(ajaxHandler);

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

在这里,在“someFunction”中,我打电话给,

someFunction: function(e){
    var evt = (e) ? e : window.event;
    var p = evt.target.name;
    var x = evt.pageX;
    var y = evt.pageY;
   ............
}

我第一次 evt.pageX evt.pageY 未定义。如果我再次点击链接,那么给出确切的位置。

我第一次获得 evt.target.name 的数据。 这些事件对工具提示很有用。

请帮助我第一次识别轴位置。 提前谢谢......

3 个答案:

答案 0 :(得分:1)

我通常只是在mousemove上随时跟踪它,它总是适用于我

var xPos;
var yPos;

$(document).ready(function () {

$(document).mousemove(function (e) {

    xPos = e.clientX;
    yPos = e.clientY;
});

});

或者可能会这样延迟         setTimeout(function () {$obj.click(); }, 500);

答案 1 :(得分:1)

第一次未定义,因为click事件是手动触发的,而不是用户点击鼠标。要解决此问题,您可以手动调用someFunction而不是触发事件,并且可以通过第一个调用的事件变量。

//First Call
$(this).click(ajaxHandler);

function ajaxHandler(e){
    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
            $obj.bind("click", someFunction);

            // call function in the context of $obj and pass through event variable
            someFunction.apply($obj[0],[e]);
        },
        error: function(){
            // Put the ajax handler back so the user can try again if it fails
            $obj.bind("click", ajaxHandler);
        }
    });
}

someFunction中你不需要对事件变量做任何事情,jQuery会为你规范它:

someFunction: function(evt){
    var p = evt.target.name;
    var x = evt.pageX;
    var y = evt.pageY;
   ............
}

答案 2 :(得分:0)

尝试使用$ obj.live(“click”,function()...)

我发现它比bind

更好