Привязать к динамически создаваемой кнопке - использование live ()? - PullRequest
1 голос
/ 06 декабря 2011

Я использую элемент управления сеткой telerik, который отображает сетку с некоторыми другими функциями, подкачкой, сортировкой, фильтрацией и т. Д.

Когда кнопка фильтра нажимается на сетке, она «всплывает» диалоговое окно фильтра. В частности, это div с input и button элементами управления.

Я хочу привязать к нажатию фильтра button элемент управления. Проблема в том, что диалоговое окно фильтра «всплывает», и, похоже, это происходит динамически, поэтому элемент отсутствует при вызове $(document).ready(). Ему также не присвоен идентификатор, но я надеюсь, что смогу получить его из его класса.

Я читал эту статью, за исключением того, что, как мне кажется, она содержится в коде telerik, что усложняет его изменение ... http://www.learningjquery.com/2008/05/working-with-events-part-2

Было также предложено использовать live() и связываться таким образом - но, похоже, он тоже не берет управление ...

Любые идеи о том, как я могу привязать к нажатию этой кнопки?

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

Спасибо.


Использование jquery 1.4.4

Обновление с кодом

$(".t-button.t-button-icontext.t-filter-button").live("click", function () {
                    alert('got it');
                });



    <div class="t-filter-help-text">And</div>
        <select class="t-filter-operator">
            <option value="endswith">Ends with</option>
            <option value="eq">Is equal to</option>
            <option value="ne">Is not equal to</option>
            <option value="startswith">Starts with</option>
            <option value="substringof">Contains</option>
        </select>
        <input type="text">
        <button class="t-button t-button-icontext t-filter-button">
            <span class="t-icon t-filter"></span>Filter
        </button>
    </div>

Я почти уверен, что селекторы не проблема, потому что я проверил с помощью .length, за статической кнопкой страницу и готов документ jquery. в готовом документе jquery, конечно, результат 0. после нажатия фильтра и предоставления доступа к динамическому контенту и нажатия кнопки, получая 1.


Я понял, почему это не работает. В коде telerik, который генерирует диалог, есть вызов stopPropagation(). Если я удаляю это, диалог фильтра становится непригодным (щелчок в любом месте закрывает его). В этом случае я не уверен, что есть решение этой проблемы.

1 Ответ

0 голосов
/ 07 декабря 2011

Я решил эту проблему с помощью плагина Брэндона Аарона liveQuery , который позволяет распространяться событиям, даже если вызван .stopPropagation(), и позволяет мне успешно сохранить функциональность диалога фильтра. .

См. http://blog.bigbinary.com/2009/10/14/how-live-method-works-in-jquery-why-it-does-not-work-in-some-cases-when-to-use-livequery.html для подробного объяснения.

...