События перезаписываются в ASP.AJAX на IE7 - PullRequest
0 голосов
/ 02 декабря 2008

Привет!

Я вызываю веб-сервис из Javascript, когда пользователь нажимает на ссылку. Мне нужно получить координаты, где пользователь щелкнул, чтобы я мог отобразить DIV в соответствующем месте. Мой клиентский скрипт выглядит следующим образом:

var g_event;

function DoWork(event, theId) 
{
    if (IsIE())
       g_event = window.event;
    else
        g_event = event;

    Acme.WebServices.Worker.GetInformation(theId, DoWorkSuccess);
}

function DoWorkSuccess(result) 
{
    var l_elemDiv = document.getElementById("content-area-div");
    DisplayAreaDiv(g_event, l_elemDiv, result);
}

Используется так:

<a href="" onclick="DoWork(event, "help");">Help</a>

Это прекрасно работает в Firefox, Safari и Opera. В IE7 не так уж и много. Например, если я добавлю следующий код в конец функций DoWork () и DoWorkSuccess ():

alert(g_event.clientX + ", " + g_event.clientY);  

В IE я получу два оповещения; первый имеет правильные координаты, но второй (который отображается поверх первого) просто «[объект]». Поскольку этот «[объект]» является последним, мой DIV неправильно отображается в левом верхнем углу окна браузера. Есть ли способ, которым я могу помешать IE дать мне второе «плохое» событие? Спасибо.

Ответы [ 2 ]

1 голос
/ 02 декабря 2008

Почему бы не извлечь и сохранить координаты в DoWork и просто использовать их в DoWorkSuccess, а не сохранять событие. Конечно, это не сработает, если вы извлекаете из события больше данных.

var client_x;
var client_y;

function DoWork(event, theId) 
{
    var g_event;
    if (IsIE())
       g_event = window.event;
    else
        g_event = event;

    client_x = g_event.clientX;
    client_y = g_event.clientY;

    Acme.WebServices.Worker.GetInformation(theId, DoWorkSuccess);
}

function DoWorkSuccess(result) 
{
    var l_elemDiv = document.getElementById("content-area-div");
    DisplayAreaDiv( { clientX : client_x, clientY : client_y }, l_elemDiv, result);
}
0 голосов
/ 02 декабря 2008

Вы пробовали установить window.event.cancelBubble = true в функции DoWork?

Если нет, то в режиме причуд есть хорошая статья о событиях и их событиях - http://www.quirksmode.org/js/events_order.html, которая мне очень помогла в решении подобных проблем.

...