$ (this) .dialog не является функцией - PullRequest
0 голосов
/ 27 марта 2012

... или Почему $(this).dialog() терпит неудачу в Firefox при использовании динамического HTML?

У меня есть событие click, которое открывает модальное диалоговое окно jQuery на веб-странице, и оно отлично работает в Chrome и IE, но не в Firefox.

Вот соответствующий код:

var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
var dialogDiv = $(document.createElement('div')).attr("id", dialogId);

dialogDiv.load(this.href, function () {
    var dialog = $(this).dialog({ autoOpen: false });
    ...
});

В Firefox 11 $(this).dialog({ autoOpen: false }) завершается ошибкой со следующим сообщением об ошибке:

$ (this) .dialog не является функцией

Но в IE 9 и Chrome 17 все работает нормально. Любая подсказка, почему это?

UPDATE:

Вот моя document.ready функция, где был код выше. Я удалил это, чтобы упростить вещи. ALERT A происходит до ALERT B. ALERT A говорит [object Object]. ALERT B происходит, когда я нажимаю на ссылку и на ней написано 'undefined'.

$(function () {

    alert($.ui);    // ALERT A

    // Wire up the click event of any dialog links
    $('.dialogLink').live('click', function () {
        alert($.ui);    // ALERT B
        return false;
    });
});

ОБНОВЛЕНИЕ 2:

Теперь, когда я указал, откуда возникла проблема, я перефразировал мой вопрос и разместил здесь минимальный код для воспроизведения исходной проблемы: Почему FF на OS X теряет jQuery-UI в обработчике событий щелчка?

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

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

0 голосов
/ 28 марта 2012

У вас есть небольшая проблема с синтаксисом / цепочкой, если я не ошибаюсь:

var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
//var dialogDiv = $(document.createElement('div')).attr("id", dialogId);
//dialogDiv equals the attribute 'id'
//try and console.log(dialogDiv) right here. what I think you want is:

var dialogDiv = $("<div />");
dialogDiv.attr("id", dialogId).load(this.href, function () {
    var dialog = $(this).dialog({ autoOpen: false });
    ...
});

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

Вы можете подумать о том, чтобы сделать что-то вроде этого:

var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000);
//Build some HTML here in the dialog div, or in a string.
theHTML = $('#'+dialogId).html() || "<p>This is a string of HTML</p>";
$('body').on('click', ".button" function () {
    console.log($.ui);
    $.dialog({autoOpen:true, html: theHTML})
});
...