2015-09-02 2 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> 

Вот JQuery, который добавляет загруженную фотографию в 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]); 
    } 
} 

, как вы можете видеть, когда файл загружен он вызывает щелчок на добавьте изображение в div, а img окружен контейнером изображения с идентификатором div id. Это то, что добавляется в текст после добавления img в div.

Я знаю, что это из-за предупреждения он показывает мне значение 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 вокруг текста. Это только после того, как изображение вставлено, и вы нажмете Enter для ввода снова. Я думаю, он считает, что после этого происходит изменение изображения при попадании на вход, а затем после этого последовательного нажатия клавиши.

+0

Я убежден, что проблема заключается в том, что проблема заключается в части документа (изменить) моего кода. Я считаю, что думает, когда я набираю, что это изменение в файле, и вставляет оператор снова, понимая, что текст не является файлом и просто покидает div. Но я не знаю, с чего начать исправлять это, или если это реальная проблема. –

+0

Исправьте меня, если я ошибаюсь, это происходит только при выборе файла для загрузки, затем введите что-то, а затем выберите другой файл. Вы можете либо сделать '$ ('# 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

Я понял, что это не имеет значения, если он там или нет, я просто просматриваю текст и заменяю каждый экземпляр divs и классов перед вставкой в ​​мою базу данных, так что это только текст. –

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