jqModal / JQuery проблема, div не обновляется с новым контентом? - PullRequest
0 голосов
/ 28 августа 2009

Я надеюсь, что кто-то может указать относительному новичку jQuery / jqModal в правильном направлении для отладки этой ошибки. Я загружаю HTML-фрагмент в div и затем использую jqModal для отображения этого div в качестве модального диалога. Проблема в том, что div отображается, но не с моим обновленным html.

Я показываю мой диалог jqModal в ответе на вызов jquery, функция foo вызывается из события onclick:

function foo(url)
{
    $.ajax({
        type: "GET",
        url: url,
        success: function(msg)
        {
            $('#ajaxmodal').html(msg);
            $('#ajaxmodal').jqmShow();
        }
    });
}

ajaxmodal - это простой div.

Первоначально я думал, что проблема должна быть во фрагменте html (msg), который я передаю обратному вызову, но я не думаю, что это так, я получаю ошибку (см. Ниже), даже когда комментирую $ ( '#ajaxmodal'). html (msg) или передать его в жестком коде html. Я думаю, что у меня правильно настроен jqModal, другие вызовы, использующие наш ajaxmodal div, работают правильно, я могу отображать модальные сообщения, обновлять содержимое на основе ответа сервера и т. Д.

Когда я пытаюсь отладить в firebug, я получаю следующую ошибку после вызова .jqmShow (). Я иногда видел ошибку в других местах, когда казалось, что, возможно, страница еще не загружена, и я признаюсь, что запутался в этом, поскольку мы обернули наши селекторы jqModal в $ (document) .ready () вызов, так что, может быть, у меня есть большая проблема, что этот вызов просто срабатывает?

Из файла jquery.jqModal.js строка 64: js err равно $ (': input: visible', h.w) [0] не определено в строке:

f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}}

Когда я делаю это в firefox, h.w [0] выглядит нормально, он ссылается на наш div "#ajaxmodal".

Заранее спасибо за любые предложения по отслеживанию этого?

Ответы [ 4 ]

2 голосов
/ 05 ноября 2010

Если у вас нет входов, нуждающихся в фокусе, вы можете изменить в jqModal.js:

f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}},

до:

f=function(h){try{}catch(_){}},

Это то, что я все равно сделал;)

0 голосов
/ 29 августа 2009

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

Проблема (я думаю) связана с тем, что ajaxmodal не совсем инициализируется как элемент jqModal, когда я выполняю вызов .html (). Вызов .jqmShow инициализирует div с нашим текстом по умолчанию. Я думал, что для инициализации диалога достаточно было поместить это в документ готовой функции:

$('#ajaxmodal').jqm({ajax: '@href', trigger: 'a[rel*=modal]', ajaxText: 'Loading...'});

но, чтобы решить мою проблему, мне пришлось отменить вызовы:

$('#ajaxmodal').jqmShow();
$('#ajaxmodal').html(msg);
0 голосов
/ 10 ноября 2009

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

Строка, о которой идет речь, в jqModal пытается сфокусировать первый входной элемент, который он находит в вашей всплывающей форме, и, если его нет, выдается исключение. Вот почему он находится в блоке исключений - ничего плохого не произойдет, если вы отключите firebug.

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

0 голосов
/ 28 августа 2009

Я не знаком с jqModal, но вы можете попробовать

append()

Вместо

html()

Я не уверен, поможет ли это, но стоит попробовать

...