Обратный вызов jQuery qTip не работает

У меня вызывается qTip для элементов в таблице..

$('#orders_table a[rel]').each(function (){
            $(this).click(function(){
                return false;
            }); 
            $(this).qtip({
                content: {
                    // Set the text to an image HTML string with the correct src URL to the loading image you want to use
                    text: 'Loading...',
                    url: $(this).attr('rel'),
                    // Use the rel attribute of each element for the url to load
                    title: {
                        text: 'Order Number ' + $(this).text(),
                        // Give the tooltip a title using each elements text
                        button: 'Close' // Show a close link in the title
                    }
                },
                position: {
                    corner: {
                        target: 'bottomMiddle',
                        // Position the tooltip above the link
                        tooltip: 'topMiddle'
                    },
                    adjust: {
                        screen: true // Keep the tooltip on-screen at all times
                    }
                },
                show: {
                    when: 'click',
                    solo: true // Only show one tooltip at a time
                },
                hide: 'unfocus',
                style: {
                    tip: true,
                    // Apply a speech bubble tip to the tooltip at the designated tooltip corner
                    border: {
                        width: 0,
                        radius: 4
                    },
                    name: 'light',
                    // Use the default light style
                    width: 570 // Set the tooltip width
                }
            })
        });

Затем у меня есть следующая функция обратного вызова:

$('#orders_table a[rel]').each(function (){

            $(this).qtip({
            api: {
                onContentLoad:function() {
                        $('#select').change(function(){

                                alert('test');
                        });    
                }
            }                         
            })
        });

QTip загружает динамический контент. Этот динамический контент имеет поле выбора с идентификатором "выбрать".

По какой-то причине, похоже, не вызывается функция ПОСЛЕ того, как qTip загрузил динамический контент.

Есть идеи? Я пробовал onRender и onContentUpdate, которые не подходят.

Спасибо!

3 ответа

На самом деле нужны разные средства, разные ID для разных контролей. Так что Попытка с другим идентификатором означает передачу некоторого аргумента и изменение идентификатора при динамическом создании элемента управления.

Это может решить вашу проблему.

Я не уверен на 100%, если это та же проблема, что и у нас, но когда вы устанавливаете якорь для qTip на ajax-ссылку, и эта ajax-ссылка запускает повторный рендеринг самой себя, qTip в конечном итоге становится без корня в DOM и обратные вызовы и таймеры просто перестают работать.

Мы решили это путем привязки qTip к ближайшему элементу. Надеюсь, это поможет.

Проблема не в обратном вызове, а в загрузке контента с определенным идентификатором. Идентификаторы должны быть уникальными на странице, поэтому вместо этого используйте здесь класс, чтобы при загрузке более одного qTip оно не отменяло правило уникального идентификатора (вызывая #select вернуть первый из этих элементов, а не все).

Вы можете сделать это, изменив свой выбор, чтобы иметь класс (или нет, если это единственный <select> в содержании), вот так:

<select class="mySelect">

Затем при связывании найдите этот элемент в обратном вызове, например так:

$('#orders_table a[rel]').each(function (){
  $(this).qtip({
    api: {
      onContentLoad:function() {
        this.elements.content.find('select.mySelect').change(function() {
          alert('test');
        });    
      }
    }                         
  });
});

Также, если вам не нужно .each() цикл по другой причине, вы можете сократить его до:

$('#orders_table a[rel]').qtip({
  api: {
    onContentLoad:function() {
      this.elements.content.find('select.mySelect').change(function() {
        alert('test');
      });    
    }
  }
});
Другие вопросы по тегам