Здравствуйте. Имеется такой код, javascript Код (Javascript): var ie=document.all?1:0; var ns=document.getElementById&&!document.all?1:0; function InsertSmile(SmileId) { if(ie) { document.all.comment.focus(); document.all.comment.value+=" "+SmileId+" "; } else if(ns) { document.forms['funforma'].elements['comment'].focus(); document.forms['funforma'].elements['comment'].value+=" "+SmileId+" "; } else alert("Ваш браузер не поддерживается!"); } Имеется форма PHP: <form id='submit_wall' name='funforma' > <p><textarea type='text' name='comment' id='".$row['id']."' value='' style='height:100p' /></textarea> <p> <input type='hidden' name='messageid' id='".$row['id']."' value='".$row['id']."'></p> <div class='smile'> <a href='javascript:x()' onclick=\"InsertSmile(':-*')\"><img src='smile/1.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile(':)')\"><img src='smile/2.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile(':(')\"><img src='smile/3.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile(';)')\"><img src='smile/4.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile(':P')\"><img src='smile/5.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile('8)')\"><img src='smile/6.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile(':D')\"><img src='smile/7.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile('=O')\"><img src='smile/9.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile(':-x')\"><img src='smile/10.gif'/></a> <a href='javascript:x()' onclick=\"InsertSmile('(T_T)')\"><img src='smile/11.gif'/></a> </div>"; $stena_group .= '<p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$row['id'].').value, '.$row['id'].' );"> Отправить</a> </p> </form> В textarea вставляются символы обозначения смайликов, а хотелось бы чтобы были изображения. Подскажите, пожалуйста, как это реализовать.
@denis01, вставил textarea contenteditable="false" чтобы элемент не изменялся. Мы вроде друг друга не так поняли. Мне необходимо чтобы отображалось изображение, а не запрет на редактирование текста. Смайл отображается так : ) а нужно изображение которое ему присвоенно.
Делай div с contenteditable и вставляй тег img. Почитай как делают WYSIWYG редакторы на HTML и JavaScript.
@denis01, пробовал с div contenteditable, брал все в блок, отдельно картинки не выходит. А за редакторы пишут как их польностью реализовывать, мне необходимы только смайлы.
Salvat, скорее ты не понял, о чем тебе пишут. Давно делал пример, не охото переписывать, нужно будет сам перепишешь: HTML: <!DOCTYPE html> <html> <head> <style> #textarea{background:#FFFFFF;color:black;border:1px solid #C0CAD5;width:328px;min-height:40px;padding:3px 25px 3px 3px;padding-bottom:5px;margin-bottom:3px;outline:0;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;line-height:150%;word-wrap:break-word;cursor:text;} .emoji{width:20px;height:20px;margin:0px;border:none;vertical-align:top; } </style> </head> <body> <div id="smiles"> <img src="smile/kiss.gif"> <img src="smile/rose.gif"> <img src="smile/wink.gif"> </div> <div id="textarea" tabindex="0" contenteditable="true" ondragend="return true"></div> <script type="text/javascript"> var arr = document.getElementById('smiles').getElementsByTagName('img'); for(var i in arr) { if(arr.hasOwnProperty(i)) { arr[i].onclick = function(event) { if('img' === this.tagName.toLowerCase()) { var img = ' <img class="emoji" src="'+this.src+'"> '; document.execCommand('insertHTML', false, img); } }; } } </script> </body> </html>
Используя код rodent90 я переписал свою форму под свои нужды. Теперь код имеет такой вид PHP: <form id='submit_wall' name='funforma' > <p><div class='textarea_stena' name='comment' id='".$row['id']."' tabindex='0' contenteditable='true' ondragend='return true'></div> <p> <input type='hidden' name='messageid' id='".$row['id']."' value='".$row['id']."'></p> <div id='smiles'> <img src='smile/1.gif'> <img src='smile/2.gif'> <img src='smile/3.gif'> </div> "; $stena_group .= '<p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$row['id'].').value, '.$row['id'].' );"> Отправить</a> </p> </form><br/><br />'; С помощью цикла выводятся сообщения и смайлики, где textarea_stena - это класс Код (CSS): .textarea_stena{background:#FFFFFF;color:black;border:1px solid #C0CAD5;width:328px;min-height: 40px;padding:3px 25px 3px 3px;padding-bottom:5px;margin-bottom:3px; outline:0;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;line-height:150%;word-wrap:break-word;cursor:text;} .emoji{margin:0px;border:none;vertical-align:top; } А это код который отображает изображение и отправляет POST запрос для записи в базу данных. Код (Javascript): function comment(text, message_id){ $.ajax({ type: "POST", url: "profile.php", data:"comment=" + text+"&messageid="+message_id, success: function(){ $("ul#wall").prepend("<li style=\"display: none;\">"+ text +"</li>"); $("ul#wall li:first-child").fadeIn(); } }); return false; }; var arr = document.getElementById('smiles').getElementsByTagName('img'); for(var i in arr) { if(arr.hasOwnProperty(i)) { arr[i].onclick = function(event) { if('img' === this.tagName.toLowerCase()) { var img = ' <img class="emoji" src="'+this.src+'"> '; document.execCommand('insertHTML', false, img); } }; } } Смайлики отображаются как необходимо, только работает код только с самым первым textarea который выводит сообщение из базы данных, с другими почему-то не работает. Так же при попытке отправить POST запрос в базу записывается undefined. Если Вас не затруднит, не могли бы пожалуйста объяснить где моя ошибка с отправкой POST(ошибка undefined) и так же с передачей фокуса разным textarea с уникальными id. --- Добавлено --- В FireBug получаю ошибку с указанием строки, это после обновления страницы. Код (Text): TypeError: document.getElementById(...) is null var arr = document.getElementById('smiles').getElementsByTagName('img');
не понятно что это, можно попробовать заменить на Код (Javascript): var arr = $("тут должен быть css selector на теги со смайликами"); это на скорую руку по коду от @rodent90, если я его правильно понял @Salvat у тебя есть такое? HTML: <div id="smiles"> <img src="smile/kiss.gif"> <img src="smile/rose.gif"> <img src="smile/wink.gif"> </div>
Да, это у меня в PHP коде. только смайлики пронумерованы. PHP: <div id='smiles'> <img src='smile/1.gif'> <img src='smile/2.gif'> <img src='smile/3.gif'> </div> "; Код работает, в плане отображения смайликов, проблема заключается в отправке POST запроса и передаче фокуса разным textarea. Отображаются смайлики только в первом, в остальных нет, прикладываю скрин-шот.
Таким образом я добился в div писать смайл, а в скрытый input его мнемоника. HTML: <!DOCTYPE html> <html> <head> <style> .textarea_stena{background:#FFFFFF;color:black;border:1px solid #C0CAD5;width:328px;min-height: 40px;padding:3px 25px 3px 3px;padding-bottom:5px;margin-bottom:3px; outline:0;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;line-height:150%;word-wrap:break-word;cursor:text;} .emoji{margin:0px;border:none;vertical-align:top; } </style> </head> <body> <div id="smiles"> <img src='smile/1.gif'/> <a href='javascript:x()' onclick="InsertSmile(':)')"><img src='smile/2.gif'/></a> <a href='javascript:x()' onclick="InsertSmile(':(')"><img src='smile/3.gif'/></a> <a href='javascript:x()' onclick="InsertSmile(';)')"><img src='smile/4.gif'/></a> <a href='javascript:x()' onclick="InsertSmile(':P')"><img src='smile/5.gif'/></a> <a href='javascript:x()' onclick="InsertSmile('8)')"><img src='smile/6.gif'/></a> <a href='javascript:x()' onclick="InsertSmile(':D')"><img src='smile/7.gif'/></a> <a href='javascript:x()' onclick="InsertSmile('=O')"><img src='smile/9.gif'/></a> <a href='javascript:x()' onclick="InsertSmile(':-x')"><img src='smile/10.gif'/></a> <a href='javascript:x()' onclick="InsertSmile('(T_T)')"><img src='smile/11.gif'/></a> </div> <form id='submit_wall' name='funforma' > <div class="textarea_stena" id="comment" tabindex="0" contenteditable="true" ondragend="return true" onkeyup="copy_text(this.value)"></div> <input id="comment_text" value='' type="text" style='height:100p' /> </form> <script type="text/javascript"> var arr = document.getElementById('smiles').getElementsByTagName('img'); for(var i in arr) { if(arr.hasOwnProperty(i)) { arr[i].onclick = function(event) { if('img' === this.tagName.toLowerCase()) { var img = ' <img class="emoji" src="'+this.src+'"> '; document.execCommand('insertHTML', false, img); } }; } } var ie=document.all?1:0; var ns=document.getElementById&&!document.all?1:0; function InsertSmile(SmileId) { if(ie) { document.all.comment.focus(); document.all.comment.value+=" "+SmileId+" "; } else if(ns) { document.forms['funforma'].elements['comment_text'].focus(); document.forms['funforma'].elements['comment_text'].value+=" "+SmileId+" "; } else alert("ошибка браузера"); } function copy_text(val) { document.getElementById("comment_text").value = val; } </script> </body> </html> У меня возникли следующие проблемы, это передача текста в скрытый input, и так же фокус уходит на input после вставки мнемоника. Текст у меня получается передавать только с input в input, с div textarea не получается в input. Или с одного textarea в другой. Использую JS Код (Javascript): function copy_text(val) { document.getElementById("comment_text").value = val; } и код формы HTML: <form id='submit_wall' name='funforma' > <div class="textarea_stena" id="comment" tabindex="0" contenteditable="true" ondragend="return true" onkeyup="copy_text(this.value)"></div> <input id="comment_text" value='' type="text" style='height:100p' /> </form> Снова получаю ошибку undefined. Подскажите где моя ошибка и как ее исправить.
Если динамически добавим, будет! Суть не в этом, а в том, что он не правильно составляет логику и структуру. Кратко: Есть место со смайлами и их символами. HTML: <img src="smile/kiss.gif" alt="=*"> Где src - это смайл, а alt - это символ смайла который при вводе будет отображать смайл (к примеру если мы вводим символ, чтобы сразу отображался смаил, нужно сверить уже с имеющими символами и смаилами по событию onkeyup и заменить символ на смаил). Далее идет место для коммента и смайлов. За исключением того, что в textarea нет визуального просмотра содержимого, используется div с атрибутом contenteditable - который как-раз дает возможность редактировать содержимое нашего div визуально и без повреждений исходного кода. Следовательно по клику на смайл, нам нужно добавлять его в позицию выставленной каретки. После этого простая отправка $.post содержимого div. Не все так просто, как кажется, для тебя будет трудновато решить. Но! Если начнешь вникать глубже сделаешь.