Проблема с jquery #find при частичной обратной передаче - PullRequest
4 голосов
/ 11 июня 2010

У меня есть сторонний компонент. Это календарь управления. У меня есть событие на стороне клиента, которое запускает JavaScript, чтобы показать всплывающее меню. Я делаю все на стороне клиента, чтобы я мог использовать MVC.

дд

   function MouseDown(oDayView, oEvent, element) {

    try {

        e = oEvent.event;

        var rightClick = (e.button == 2);
        if (rightClick) 
        {
            var menu = $find("2_menuSharedCalPopUp");
            menu.showAt(200, 200, e);
        }


    }
    catch (err) {
        alert("MouseDown() err: " + err.description);
    }


}

Javascript прекрасно запускается с помощью $ find.

У меня есть другой метод на стороне клиента, который обновляет календарь посредством частичной обратной передачи. Как только я сделал это, все последующие MouseDowns (щелчки правой кнопкой мыши), которые используют ошибку поиска $ find с 'null'.

Похоже, что все подобные проблемы возникают у людей , вызывающих javascript после обратной передачи - с решениями, регистрирующими событие с помощью PageRequestManager или регистрирующими функцию на стороне клиента на сервере - и так далее.

Тем не менее, событие запускается, и JavaScript работает - это ссылка в DOM, которая кажется проблемой.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 11 июня 2010

Я попытаюсь пролить свет на эту проблему:

  1. $find - это не метод jQuery, хотя он может выглядеть так.Он взят из ASP.NET Ajax и используется для поиска компонентов ASP.NET Ajax на стороне клиента.Это правильное использование без "#" - ему нужен идентификатор компонента, который в большинстве случаев является свойством сервера ClientID.
  2. Я думаю, что вы, возможно, используете стороннюю библиотеку компонентов, основанную на ASP.NET Ajax.Вполне возможно, что эта библиотека не поддерживает MVC способ Ajax.MVC Ajax не работает как ASP.NET Ajax - он не действует как UpdatePanel и не выполняет теги сценариев в частичном представлении.В результате компонент календаря никогда не инициализируется, и $ find правильно возвращает null.

Что дает?Я предлагаю вам попробовать использовать jQuery ajax для загрузки частичных представлений.Он правильно выполняет любой встроенный код JavaScript и может привести к лучшим результатам.

0 голосов
0 голосов
/ 11 июня 2010

Вы проверили имя и идентификатор, когда возвращаетесь с частичного просмотра вызова?возможно, идентификатор изменился.

, если это так, тогда дайте элементу управления имя класса, скажем, «MyCalendar», а затем используйте $find(".MyCalendar");

0 голосов
/ 11 июня 2010

Вы имеете в виду menu = $('#2_menuSharedCalPopUp');?

$ find вообще не объявлено в вашей функции.

использование .find () в jQuery равно

<div id="parent">
   <div class="child" />
</div>

$('#parent').find('.child'); // useful for cached jQuery objects
...