Jquery второе событие Click Fire отсутствует в первый раз - PullRequest
2 голосов
/ 19 мая 2011

Во-первых, щелчок по ссылке будет вызывать 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 ]

1 голос
/ 19 мая 2011

Это не определено в первый раз, потому что событие щелчка запускается вручную, а не щелчком пользователя мышью.Чтобы обойти это, вы можете вызвать someFunction вручную, вместо того, чтобы вызвать событие, и вы можете передать переменную события первого вызова через.с помощью переменной события jQuery нормализует ее для вас:

someFunction: function(evt){
    var p = evt.target.name;
    var x = evt.pageX;
    var y = evt.pageY;
   ............
}
1 голос
/ 19 мая 2011

Я обычно просто отслеживаю это все время при перемещении мыши, и это всегда работает для меня

var xPos;
var yPos;

$(document).ready(function () {

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

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

});

или, возможно, делает задержку, например, setTimeout(function () {$obj.click(); }, 500);

0 голосов
/ 19 мая 2011

попробуйте использовать $ obj.live ("click", function () ...)

Я обнаружил, что он работает лучше, чем bind

...