JQuery проблема добавления событий при загрузке - PullRequest
2 голосов
/ 16 июля 2009

У меня проблема с получением события 'change' для регистрации со следующим кодом

var map = function(){

  function addMapTriggers(){
    $("#map_form select").change(getDataWithinBounds);
  }

 return{
  init: function(){
   getDataWithinBounds();
   addMapTriggers();
  }
 };
}();

и в документе jquery.ready

$(function(){
  map.init();
});

Итак, я получаю свои начальные данные, а затем каждый раз, когда я изменяю один из селекторов, я снова получаю данные карты (getDataWithinBounds отправляет вызов ajax). Проблема в том, что это не работает, событие изменения никогда не добавляется.

Однако, если в консоли я наберу map.init (); это работает. Это странно, я не понимаю, какова разница? Что мне здесь не хватает? Я тестирую это на сафари и Firefox с точно таким же поведением

Ответы [ 3 ]

1 голос
/ 16 июля 2009

Идентификатор 'map_form' по вашему выбору? Если да, то вы должны сделать

$("#map_form").change(getDataWithinBounds);

'# map_form select' попытается подключить событие изменения ко всем выбранным элементам, присутствующим в элементе, указанном # map_form.

EDIT:

Заметил еще одну вещь, map.init на самом деле не существует.

В вашем коде map - это именованная функция, которая выполняется немедленно и возвращает объект, имеющий метод init. Это не означает, что var 'map' имеет метод init.

Вы хотите попробовать что-то вроде этого,

var map = function()
{

    function addMapTriggers()
    {
        $("#map_form select").change(getDataWithinBounds);
    }

    return {
        init:  function()
               {
                    getDataWithinBounds();
                addMapTriggers();
            }
    };
}();

В приведенном выше коде вы запускаете анонимную функцию, которая возвращает объект, имеющий метод init, и присваивает результат карте. Теперь у объекта карты будет метод init, и вы можете сделать это:

$(function()
{
  map.init();
});
0 голосов
/ 17 июля 2009

Я сейчас очень смущен и извиняюсь за то, что зря терял время. Конечно, вышеприведенный код работает, но то, что я делаю, отличается тем, что мой сайт использует плагин jquery selectbox, который стилизирует выборки, создавая UL с событиями щелчка, чтобы действовать как выбор (не мой выбор, поверьте мне) К сожалению, я вызывал init до , применяя код selectbox, который сам изменяет привязку select. Сначала вызов selectbox, а затем вызов map.init () полностью исправили его.

Большое количество извинений и большое спасибо (особенно SolutionYogi) за то, что нашли время помочь мне.

0 голосов
/ 16 июля 2009

Почему бы не так?

function map(){
 return {
  me = this,
  addMapTriggers: function(){
    $("#map_form select").change(getDataWithinBounds);
  },
  init: function(){
   getDataWithinBounds();
   me.addMapTriggers();
  }
 };
}();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...