2015-09-02 95 views
0

我有一個表單將內容發佈到牆上。我們可以在那裏發佈圖片和文字。我將表單內容顯示在contenteditable div中,所以郵箱顯示人們想要上傳的圖像,並且他們也可以輸入div。我注意到,雖然人們上傳圖像。它會像預期的那樣被添加到div中,當它們開始輸入時,它也會在文本週圍添加照片容器。我怎樣才能阻止這種情況發生?jquery添加多個div容器

這裏是我的表單代碼

<form id="post-form" action="Scripts/create-post.php" method="post" onsubmit="return setEditable();"> 
    <input type="hidden" id="posted" name="posted" value=""/> 
    <div id="post-message" name="post-message" contentEditable="true"></div> 
    <input id="upload-pic" name="upload-pic" type="file"/> 
    <button class="post-buttons" onclick="chooseFile(); return false;">Add Photo</button> 
    <button class="post-buttons">Add Link</button> 
    <input type="submit" value="Post" /> 
    <div class="cleared"></div> 
</form> 

這裏是增加了上傳照片到CONTENTEDITABLE DIV

function chooseFile() { 
    $("#upload-pic").click(); 
} 

$(document).on('change', "#upload-pic", function(){ 
    readURL(this); 
}); 

function readURL(input){ 
    if(input.files && input.files[0]){ 
     var reader = new FileReader(); 
     reader.onload = function(e){ 
     $('#post-message').prepend("<div id='post-image-container'><img id='preview'/></div>"); 
      $('#preview').attr('src', e.target.result); 
     } 

     reader.readAsDataURL(input.files[0]); 
    } 
} 

,你可以看到,當文件被上傳它觸發點擊了jQuery將圖像添加到div中,並將img包圍在div id後置圖像容器中。這是img添加到div後添加到文本的內容。

我知道這是因爲警報的它顯示我作爲

<div id="post-image-container"><img src='whatever the path is'></div><div id="post-image-container">hello world(if this is what the user typed in)</div> 

所以我設法找到了,如果文本是在CONTENTEDITABLE DIV已經或之前的div的價值,它不添加文本週圍額外的div標籤。只有在圖像被插入後,你再次敲入回車鍵,我認爲它會確認輸入命中的圖像發生了變化,然後是連續的鍵擊。

+0

我確信問題出在我的代碼的document.on(change)部分。我相信當我輸入它們是對文件的更改時,它正在想,並且再次插入語句,實現文本不是文件而只是離開div。但我不知道從哪裏開始解決這個問題,或者如果那是真正的問題。 –

+0

糾正我,如果我錯了,只有當你選擇文件上傳,然後鍵入一些東西,然後選擇一個不同的文件。你可以在prepend之前執行'$('#post-image-container')。remove();'去除先前的div。或者你可以檢查'#post-image-container'是否已經存在,只需更新它而不是做一個新的前置。 –

回答

0

檢查#post-image-container是否已經存在,只需更新它。如果它沒有,則將其前置。

function readURL(input){ 
     if(input.files && input.files[0]){ 
      var reader = new FileReader(); 
      reader.onload = function(e){ 


       if($('#post-image-container').length){ 

        $('#preview').attr('src', e.target.result); 

       }else{ 

        $('#post-message').prepend("<div id='post-image-container'><img id='preview'/></div>"); 
         $('#preview').attr('src', e.target.result); 
        } 

       } 

      reader.readAsDataURL(input.files[0]); 
     } 
    } 
+0

如果我更新了#post-image-container,它將帶走我在那裏發佈的圖像。也許我可以嘗試做,如果它不存在再次包括。 –

+0

它只會更新圖像,保持文本不變。除非你想能夠添加多個圖像...請更多地解釋預期的結果。很明顯,你最終得到重複的div的原因是因爲你每次更改上傳輸入時都會添加一個新的。 –

+0

我覺得它不關心,如果它在那裏或沒有,我只是看透了文本,並在插入到我的數據庫之前替換div和類的每個實例,所以它只是文本。 –