2012-11-23 2 views
0

Я создаю полное редактируемое меню и застрял в одной странной проблеме. Я создал скрипт для редактирования текста кнопки меню, он скрывает ссылку и добавляет вход в div. Вот код:JQuery, получающий родительский элемент ранее использованного элемента

$('#edit_button').click(function() { 
     var temp = id; 
     $("#" + temp + " a").hide("fast", function(){ 
      if($("#link_editor").length > 0){ 
       var temp_id = $("#link_editor").parent().attr("id"); 
       $("#link_editor").hide("fast", function(){ 
        $("#link_editor").remove(); 
        $("#" + temp_id + " a").show("fast"); 
       }); 
      } 
      $("<input type='text' id='link_editor' value='" + $("#" + temp + " a").html() + "'>").hide().appendTo("#" + temp).show("fast"); 
     }); 
    }); 

меню выглядит следующим образом => Главная Блог Контакт Так что, когда я нажимаю первый на дому, а затем на блоге, и т.д. - все работает отлично, но если я начну из списка контактов и вернуться назад это Безразлично Не работай. Вы можете увидеть живой пример here. Просто наведите курсор на любую кнопку меню и нажмите на значок редактирования. Глобальный идентификатор получен с помощью мыши.

Вот код меню:

<div id="sortable" class="ui-sortable"> 
     <div id="0"><a href="?page=Home" id="0" class="prevent_doubleclick" title="" style="display: block; ">Home</a></div> 
     <div id="1"><a href="?page=Gallery" id="1" class="prevent_doubleclick" title="" style="display: block; ">Gallery</a></div> 
     <div id="2"><a href="?page=Blog" id="2" class="prevent_doubleclick" title="" style="display: block; ">Blog</a></div> 
     <div id="3"><a href="?page=About" id="3" class="prevent_doubleclick" title="" style="display: none; ">About</a><input type="text" id="link_editor" value="About" style=""></div> 
     <div id="4"><a href="?page=Contact" id="4" class="prevent_doubleclick" title="">Contact</a></div> 
    <div class="add_button" style="margin-top: -10px; display: none; "><a style="cursor: pointer; text-decoration: none;"><img src="/img/add.png">Add Button</a></div> 
</div> 

Любая помощь будет высоко оценили, спасибо.

+0

'$ (это) .remove() родителя () .find ('a'). show ('fast'); 'внутри обратного вызова элемент доступен как' this', а затем это просто вопрос пересечения DOM? – adeneo

+0

Проблема в том, что мне нужно удалить элемент, который был ранее получен, а не тот, который в настоящее время наращивается – SinSoul

ответ

0

Я узнал ответ на свой вопрос. Так или иначе функция .remove() не ждет завершения функции .hide(). Может быть, есть лучший способ решить эту проблему, но я нашел только, как это: Изменено это:

$("#link_editor").hide("fast", function(){ 
        $("#link_editor").remove(); 
        $("#" + temp_id + " a").show("fast"); 
       }); 

Для этого:.

   $("#link_editor").remove(); 
       $("#" + temp_id + " a").show("fast"); 
Смежные вопросы