('#').dialog не является ошибкой функции после использования функции jQuery .load()

У меня есть следующий код:

<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'mydialog',
    // additional javascript options for the dialog plugin
    'options'=>array(
        'title'=>'Confirmar',
        'resizable'=>'false',
        'autoOpen'=>false,
        'modal'=>true,      
        'buttons'=>array('Eliminar'=>'js:function(){deleteMessage();$(this).dialog("close");}',
                         'Cancelar'=>'js:function(){$(this).dialog("close");}',),
    ),
));?>
<div style="display:none">Do you confirm you want to delete the item?</div> 
<?php 
$this->endWidget('zii.widgets.jui.CJuiDialog');
?>

<input type="button" onclick="js:openDlg()" value="Open the dialog">
<script language="javascript" type="text/javascript">
    function openDlg(){
        $("#mydialog").dialog("open"); 
    }
</script>

Это работает ОТЛИЧНО, пока мне не понадобилось вызывать функцию jQuery .load(). В целях тестирования у меня есть кнопка, которая вызывает метод .load() (хотя предположительно его следует вызывать, когда документ готов). Если я нажму кнопку открытия диалогового окна до нажатия этой пробной кнопки, диалоговое окно откроется правильно. В противном случае происходит сбой со следующей ошибкой:

$("#mydialog").dialog не является функцией $("#mydialog").dialog("open");

Пробная кнопка:

<input type="button" onclick="js:load_wall()" value="Load Messages">
function load_wall(){
        var liga = $("#liga_id").val();
        $('#div_wall_messages').load('displayMessages',{liga_id: liga}, function(){

        });

Пожалуйста, любая помощь более чем приветствуется. Эта ошибка сводит меня с ума. Спасибо!!


person Soph    schedule 02.08.2011    source источник
comment
Что такое $this? Я не знаю ни одного объекта с этим методом.   -  person Madara's Ghost    schedule 02.08.2011
comment
@Rikudo Sennin CJuiDialog — это виджет, предоставляемый фреймворком Yii, который я использую. Он инкапсулирует плагин JUI Dialog.   -  person Soph    schedule 02.08.2011
comment
Абстрагируйте свой PHP от этого вопроса. Это совершенно неважно. Вместо этого расскажите нам о предварительно обработанном выводе HTML/JS.   -  person Lightness Races in Orbit    schedule 02.08.2011
comment
@Rikudo: это это вопрос jQuery; PHP должен быть удален из вопроса, а не Javascript удален из тегов.   -  person Lightness Races in Orbit    schedule 02.08.2011
comment
Можете ли вы показать нам html? В частности, где #div_wall_messages по отношению к #mydialog? #mydialog находится внутри #div_wall_messages?   -  person villecoder    schedule 02.08.2011


Ответы (3)


Что такое displayMessages? Это страница со скриптами? Это страница, содержащая другую копию jQuery? Если вы включаете вторую копию jQuery, вы перезаписываете существующую копию — возможно, вы перезаписываете jQuery, в который загружен плагин Dialog, новым, в котором его нет.

Если вы хотите загрузить в div и то, что у вас есть в загружаемом файле, представляет собой полную страницу HTML (включая <head>, <script>s и др.), то вам следует загружать только тот фрагмент контента (по id), который вы хотите в вашу цель. Во всех случаях избегайте load()обработки HTML-контента, содержащего <script>; результаты, в зависимости от обстоятельств, либо ничего, либо ничего разумного.

Также js: во всем приведенном выше коде ничего не делает и его следует опустить.

person bobince    schedule 02.08.2011
comment
Спасибо @bobince! Я бы никогда не решил это сам. Да, displayMessages — это действие, которое отображает другую страницу со скриптами. Так это именно то, что происходило, я заменял уже загруженный javascript - person Soph; 03.08.2011

Если проблема заключается в загрузке, вероятно, вы загрузили (и перезаписали) загруженные в данный момент библиотеки, которые могут включать jQuery с вашим диалоговым плагином. Убедитесь, что вы загружаете чистую страницу (каждый раз, когда я использую AJAX, я обычно генерирую только один <div> или <ul>, что мне нужно, а не всю веб-страницу.

Если это не удается, убедитесь, что включены правильные файлы javascript, которые включают jQuery и, по-видимому, также пользовательский интерфейс jQuery.

Проверьте сеть/ресурсы вашего браузера, отслеживая, что происходит с этими файлами сценариев, и посмотрите, есть ли какие-либо другие сообщения об ошибках (может быть, 404 не найден?) в файлах javascript.

person Madara's Ghost    schedule 02.08.2011
comment
извините, что отклонил предложение тегов. Но, глядя на это подробнее, я действительно не понимаю, почему это не должно быть помечено как проблема с jquery/javascript. Спасибо за помощь! - person Soph; 03.08.2011

Как уже объяснялось выше, вы, вероятно, переопределяете библиотеки.

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

Другой способ — вставить iframe между диалогом и содержимым диалога. Браузер рассматривает фреймы как отдельную страницу со своими собственными скриптами. Таким образом, сценарии содержимого «поверх» iframe будут отделены от сценариев диалога «под» iframe.

Поскольку вы используете Yii, проверьте эту вики.

person Gerhard Liebenberg    schedule 01.08.2013