2014-03-03 68 views
0

我有網站上有一些列,並且它們的列可以通過textarea編輯,如果你想編輯的列有一些內容,那麼舊的內容將被放到textarea中。然後在保存按鈕上將該文本區域的值存儲到一個變量中,如果我警告此變量,它將提醒與舊內容相同的值。jquery textarea沒有更新它的值

的想法是biscally這樣的:FIDDLE

凡textarea的更新一個div,當你點擊保存,並得到上述內容在div當你點擊編輯。這個簡單的工作,因爲它應該,但我與我的代碼trupple,我找不到錯誤。並且在控制檯中也沒有錯誤。

在我所做的例子和我的問題的地方differense是我使用ajax調用來獲取舊內容。

首先這裏是編輯點擊會發生什麼:

$('body').on('click', '.edit_column', function() {  

    column_to_edit = $(this).parent().parent().attr('id'); 
    current_step = "edit"; 

    $.ajax({ 
      url: 'pageEditor_ajax.php', 
      dataType: 'json', 
      async: false, 
      type: 'post', 
      data: { 
       item_id: column_to_edit, 
       mode: "edit_item" 
      }, success:function(s) { 
       element_type = s.type; 
       old_content = s.content; 
      }, error:function(e) { 
       alert('Error!'); 
      } 
     }); 

    if(element_type == 'text') { 
     $('.input_type').html('<textarea class="dialog_editor element_content"></textarea>'); 
    } 


    $('.element_content').val(old_content); 

    $('.column_tool_dialog').css('display', 'block'); 
    $('#edit_column_dialog').css('display', 'block'); 
    $('#edit_column_dialog').animate({ 
     left: "-=300px", 
     opacity: "1" 
    },500); 
}); 

首先,我找到我想要編輯的列的ID,所以我認爲即時通訊編輯我的數據庫中的右列舒爾。

current_step變量僅用於外觀,有一些不同的對話框。

我讓我的ajax調用返回成功。

然後,我有一個if語句來檢查它是什麼類型的列,我有3種類型,其他兩個是圖像和標題,沒有啓動它們,因爲它還沒有工作。

if語句應該構建需要編輯該列類型的輸入。

在輸入字段構建後,它將old_content放入textarea,這也可以正常工作。最後幾行只是爲了讓下一個對話框生動畫面。所以我的編輯步驟有效(我認爲)。

然後你看到textarea,並且我有它的舊內容。當您單擊保存按鈕,出現這種情況:

$('#element_edit_button').click(function(e) { 

    e.preventDefault(); 

    new_content = $('.element_content').val(); 

    alert(new_content); 

    $.ajax({ 
      url: 'pageEditor_ajax.php', 
      dataType: 'json', 
      async: false, 
      type: 'post',   
      data: { 
       item_id: column_to_edit, 
       item_content: new_content, 
       col_type: element_type, 
       mode: "save_item", 
       item_attr_alt_tag: alt_tag, 
       item_attr_title_tag: title_tag 
      }, success:function(s) { 
      }, error:function(e) { 
       alert('Der skete en fejl!'); 
      } 
    }); 


    $('li#'+column_id+' .preview_content').html(new_content); 
    $('li#'+column_id+' > div > small').html(new_content); 
}); 

在這一步,我有很多事情只是外觀上來看,所以我已經排除他們這一次。但是這裏的問題很簡單,new_content變量與old_content一致嗎?因此,所有使用new_content的地方都不會更新。

編輯 下面是HTML在這一切發生了:

<div id=\"edit_column_dialog\" class=\"column_tool_dialog_box\"> 
        <div class=\"close\">x</div> 
         <h3>Rediger dit element</h3> 
         <form method=\"post\" id=\"save_element\"> 
          <p class=\"error_message\"></p> 
          <div class=\"input_type\"></div> 
          <input id=\"element_edit_button\" class=\"green dialog_button\" type=\"submit\" value=\"Gem element\" /> 
         </form> 
        </div> 
       </div> 

對不起,長的帖子,希望有人有awnser。

+0

您還應該發佈您的相關HTML,它將有助於快速解答您的問題。 – Tomanow

+0

好吧,我已經更新了我的問題與HTML – Legarndary

+0

好..因爲你的一些邏輯是有點無意義的.. –

回答

0

正如其他人所說,你的jQuery甚至html可以使用一些清理。隨着中說,假設我正確理解你的問題,我認爲你只是缺少一行在#element_edit_button單擊事件:

$('.element_content').val(new_content); 

這應該做的伎倆。