2009-11-25 2 views
0

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

У меня есть простая таблица с несколькими записями в каждой строке, причем последний столбец является гиперссылкой удаления. Я пытаюсь использовать диалог для всплывания и подтверждения удаления. Это отлично работает, если я использую явные имена div, где находится диалог (я устанавливаю его ровно на один div над div, где находится таблица). Сначала я использую уничтожить, что, похоже, решает проблему «только один раз», пока я называю диалоговое окно div. Я пытаюсь унифицировать код, поэтому я предпочел бы уйти от явного названия div, где будет жить диалог, а скорее обратиться к преддиверситету. Это работает в первый раз, но последующие клики не выполняются:

<code> 
    $(".deleteLinkDiag a").livequery('click',function() { 

    var myParent = $(this).parents("div:eq(0)"); //container div to be replaced 
    var myDiag = $(myParent).prev("div");  //one div before container div 
    var urlLoad = $(this).attr("href"); 
    $(myDiag).dialog('destroy'); 
    $(myDiag).dialog({ 
      bgiframe: true, 
      resizable: false, 
      height:140, 
      modal: true, 
      autoOpen: false, 
      overlay: { 
       backgroundColor: '#000', 
       opacity: 0.5 
      }, 
      buttons: { 
        "Confirmz":function() 
        { 
         myParent.load(urlLoad, function() { }); 
         $(this).dialog("close"); 
        }, 
        Cancel: function() 
        { 
         $(this).dialog("close"); 
        } 
      }, 
      //close: function(ev, ui) { $(this).dialog('destroy');} 
     }); 
    $(myDiag).dialog('open'); 
return false; 
}); 
</code> 

Любые идеи?

+0

ли 'уаг myDiag = $ (myParent) .prev ("DIV");' всегда выбрать другой DIV для каждой кнопки, или же она всегда выбрать тот же DIV? –

+0

Можете ли вы загрузить пример где-нибудь, демонстрирующий, как это не работает для вас? Мне сложно визуализировать –

+0

Уверенная вещь: http://163.150.129.104/j/index.php Итак, идея состоит в том, что есть две таблицы данных, каждая из которых имеет уникальный столбец удаления для каждой строки, а каждый из них имеет другое диалоговое окно перед таблицей div. Работы появляются в первый раз, но не после этого. Если я поместил имя класса в диалоговом окне («открыто»), он отлично работает, но я хочу иметь возможность нацеливать только один div без создания нескольких копий этой функции. – EvilPluto

ответ

2

OKay, так что, надеюсь, это поможет кому-то по дороге. У меня на самом деле возникли две проблемы:

  1. Если вы не уничтожили диалог(), то он действительно не существует в DOM под старым именем. Поэтому во второй раз это было всегда неопределенно.
  2. Даже если вы уничтожите диалоговое окно, вы все равно не сможете его найти. Это потому, что когда диалог теоретически возвращает его в состояние pre-init, он делает это, отбрасывая его в нижней части DOM прямо перед тегом body. Таким образом, он больше не находится в «prev» или «prevAll».

Я обошел это, просто установив имя диалогового окна так же, как вызывающий div, добавленный с помощью «Diag». Затем я могу отслеживать это независимо от того, где это делает jquery. Уф.

$(".deleteLinkDiag a").livequery('click',function() { 
      var urlLoad = $(this).attr("href"); 
      var myParent = $(this).parents("div:eq(0)"); //container div to be replaced 
      var myDiag = myParent.attr('id') + 'Diag'; 
      $("#" + myDiag).dialog({ 
        bgiframe: true, 
          resizable: false, 
          height:140, 
          modal: true, 
          autoOpen: false, 
          overlay: { 
            backgroundColor: '#000', 
            opacity: 0.5 
          }, 
        buttons: { 
            "Confirm":function() 
            { 
              myParent.load(urlLoad, function() { }); 
              $(this).dialog("close"); 
            }, 
            Cancel: function() 
            { 
              $(this).dialog("close"); 
            } 
           }, 
        close: function(ev, ui) { 
          $(this).dialog("destroy"); 
        } 
     }); 
    $("#" + myDiag).dialog('open'); 
    return false; 
    }); 
0

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

Если вы хотите ссылаться на определенный div, вам следует указать этот конкретный div. Тем не менее, я слышал, что вы говорите, что хотите ссылаться на определенный div (который буквально единственный div, который используется как диалог) в то же время, когда вы говорите, что боитесь ссылаться на этот div по ID.

В принципе, если есть только один DIV, который используется в качестве диалогового окна, а затем принять, что и просто назвать это Див имя:

<div id="dialog"/> 

.

myDiag = $('#dialog'); 

Таким образом, нет путаницы, если вы выберете правильный div.

Однако, если я почему-то не сказал, что вы можете установить точки останова в firebug в точке, где вы назначаете myDiag, чтобы вы могли видеть, что на самом деле находится myDiag.

+0

Спасибо, что ответили. Причина, по которой я не хочу ссылаться на конкретный идентификатор div по ID, заключается в том, что я хочу иметь возможность использовать эту функцию в целом на нескольких страницах (и, возможно, даже с несколькими наборами кнопок удаления на одной странице), поэтому идентификатор div может измениться. Я попробую ваше предложение с Firebug. – EvilPluto

Смежные вопросы