Вроде простая проблема
Всем привет! Пишу на php в js полный чайник (постараюсь исправить в скором времени, но проблему нужно решить сейчас). Есть вроде бы простая задача (для знающих).
Существует форма, когда форма активна для ввода текста, справа возле нее должна вывоиться картинка (ввиде карандаша, типа форма редактируется). На сколько понимаю это как то так делается <p>Ваш email:</p><div class="input"><input type="text" name="email" onclick="КАРТИНКА"></div> Как сделать так чтобы вместо картинки выводился див с определенным класом (в котром будет картинка) и как сделать так чтобы сократить и максимально вынести код за пределы html? Так же для картинки нужен прелоад, чтобы процеса загрузки при клике на форму не было, а выводилась сразу иконка. Извините за ламерские вопросы, описал как смог, надеюсь на Ваши разьяснения и помощь |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head> <script type="text/javascript"> window.onload = function() {//после загрузки страницы var imgStyle = document.getElementById('img_container').style;//сохраняем стиль контейнера вашего карандаша в переменную var email = document.getElementById("email");//сохраняем инпут в переменную email.onfocus = function(){//при фокусировке на инпуте imgStyle.display = 'block';//показываем див }; email.onblur = function() {//при потере фокуса imgStyle.display = 'none';//скрываем див } } </script> </head><body> <p>Ваш email:</p><div class="input"><input type="text" name="email" id="email"></div><div id="img_container" style="display:none"><img src="http://javascript.ru/themes/defaultangy/images/balance.png"></div> </body></html> |
Раед,
Огромное спасибо! Еще один вопрос, а если на странице несколько форм, возле которых при фокусе нужно выводить эту картинку ? |
Цитата:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head> <script type="text/javascript"> window.onload = function() {//после загрузки страницы var img_container = document.createElement('div'), img; img_container.appendChild(img = new Image); img_container.style.display = 'none'; img.src = 'http://javascript.ru/themes/defaultangy/images/balance.png'; var formInputs = document.getElementsByTagName('input'); for (var i=0, j=formInputs.length;i<j; i++) { +function() { var email = formInputs[i], imgCopy = img_container.cloneNode(true); if ((' '+email.className+' ').indexOf('showImg')===-1) return; email.parentNode.appendChild(imgCopy); email.onfocus = function(){//при фокусировке на инпуте imgCopy.style.display = 'block';//показываем див }; email.onblur = function() {//при потере фокуса imgCopy.style.display = 'none';//скрываем див } }() } } </script> </head><body> <p>Ваш email:</p><div class="input"><input type="text" name="email" class="showImg"></div> <p>Ваш email:</p><div class="input"><input type="text" name="email" class="showImg"></div> <p>А тут у инпута нет класса showImg</p><div class="input"><input type="text" name="email"></div> <p>Ваш email:</p><div class="input"><input type="text" name="email" class="showImg"></div> <p>Ваш email:</p><div class="input"><input type="text" name="email" class="showImg"></div> </body></html> |
Раед,
и как вы в этой каше что-то сами находите. |
Цитата:
Отступы подредактировал |
Цитата:
<!DOCTYPE HTML> <html> <head> <script type="text/javascript"> window.onload = function() {//после загрузки страницы var img = new Image(), formInputs = document.getElementsByTagName('input'), img_container = document.createElement('div'); img_container.appendChild( img ); img_container.style.display = 'none'; img.src = 'http://javascript.ru/themes/defaultangy/images/balance.png'; for( var i = 0, j = formInputs.length; i < j; i++ ) { (function( email ) { var imgCopy = img_container.cloneNode(true); if ( ( ' '+email.className+' ' ).indexOf( 'showImg' ) === -1 ) { return; } email.parentNode.appendChild( imgCopy ); email.onfocus = function() { //при фокусировке на инпуте imgCopy.style.display = 'block';//показываем див }; email.onblur = function() { //при потере фокуса imgCopy.style.display = 'none';//скрываем див } })( formInputs[i] ); } } </script> </head> <body> <p>Ваш email:</p> <div class="input"> <input type="text" name="email" class="showImg"> </div> <p>Ваш email:</p> <div class="input"> <input type="text" name="email" class="showImg"> </div> <p>А тут у инпута нет класса showImg</p> <div class="input"> <input type="text" name="email"> </div> <p>Ваш email:</p> <div class="input"> <input type="text" name="email" class="showImg"> </div> <p>Ваш email:</p> <div class="input"> <input type="text" name="email" class="showImg"> </div> </body> </html> |
спс, еще один момент, данная опция должна работать так же и для textarea и если это возможно выводить небольшое инфо к каждому полю при фокусе, вот в таком плане
![]() Инфо для каждого поля разное |
никто не подскажет? :help:
|
|
спасибо и на том. Вопрос решил. Может кому нужно будет
function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } function prepareInputsForHints() { var inputs = document.getElementsByTagName("input"); for (var i=0; i<inputs.length; i++){ inputs[i].onfocus = function () { this.parentNode.getElementsByTagName("span")[0].style.display = "inline"; } inputs[i].onblur = function () { this.parentNode.getElementsByTagName("span")[0].style.display = "none"; } } var selects = document.getElementsByTagName("select"); for (var k=0; k<selects.length; k++){ selects[k].onfocus = function () { this.parentNode.getElementsByTagName("span")[0].style.display = "inline"; } selects[k].onblur = function () { this.parentNode.getElementsByTagName("span")[0].style.display = "none"; } } var textareas = document.getElementsByTagName("textarea"); for (var m=0; m<textareas.length; m++){ textareas[m].onfocus = function () { this.parentNode.getElementsByTagName("span")[0].style.display = "inline"; } textareas[m].onblur = function () { this.parentNode.getElementsByTagName("span")[0].style.display = "none"; } } } addLoadEvent(prepareInputsForHints); html, после формы добавляем span с текстом <span class="hint">какойто текст</span> сss Код:
.hint { |
появился еще один вопрос по этому поводу, Все нормально работает, вот только IE 6-8 хоть и работает но ругется. Ошибка
Что это значит и как это можно исправить (скрипт выше)? |
Цитата:
Можно это обойти примерно так: ( this.parentNode.getElementsByTagName( "span" )[ 0 ] || { style: {} } ).style.display = "inline"; |
jorik,
Токо шо напоролся на такое ж в ИЕ Нужно начинать поиск с родителя, который имеет id и далее внутрь, |
Цитата:
Теперь подсказки возле форм по клику на форму появляются, но не исчезают по клику на вне формы или по другой форме. Цитата:
|
Всем огромное спасибо, разобрался :)
|
Часовой пояс GMT +3, время: 00:54. |