|
|
Модератор форума: JonMagon |
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » Из select в input и обратно |
Из select в input и обратно |
На странице редактирования профиля есть такая переменная $ICQ_FL$ в шаблоне она выводит input, выглядит он так
Код <input id="siF2" class="manFlaICQ" type="text" maxlength="15" value="" style="width:100%;" size="20" name="icq"></input> В это поле типа нужно ICQ вписывать, но я его использую для других целей. И так, ниже я прописал такой селект Код <select id="siF2_2" onchange='bgfixed();' onkeydown='bgfixed();' onkeyup='bgfixed();' size="1"> <option value="1000000">Не фиксировать</option> <option value="2000000">Фиксировать</option> </select> И такой вот скрипт Код <script language="JavaScript"> function bgfixed(){document.getElementById('siF2') .value = document.getElementById('siF2_2') .value; return !1;} </script> Что получается, теперь то что я выбираю в селекте, переносится в input. Всё хорошо. НО Допустим, пользователь выбрал нужное значение в селекте, оно вставилось в инпут и он сохранил изменения. Через время он решил значение поменять, заходи на страницу где стоят эти поля и видит, что в инпуте одно значение (которое он выбирал) а вот селект всегда по умолчанию показывает Код <option value="1000000">Не фиксировать</option> Нужно дописать скрипт, что бы данные из инпута возвращались в селект. Вот) Вроде понятно всё описал, выручайте парни) |
Код <input id="siF2" class="manFlaICQ" type="text" maxlength="15" value="" style="width:100%;" size="20" name="icq"></input> <select id="siF2_2" onchange='bgfixed(true);' size="1"> <option value="1000000">Не фиксировать</option> <option value="2000000">Фиксировать</option> </select> Код <script type="text/javascript"> function bgfixed(is){ if(!document.getElementById('siF2'))return; if(is){ document.getElementById('siF2').value = document.getElementById('siF2_2').value; }else{ document.getElementById('siF2_2').value = document.getElementById('siF2').value; }};bgfixed(); </script> Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8 |
|
Цитата (Rad_van_Cor) fflesh, да, теперь оно возвращает данные из инпута в селект. Но, когда я хочу снова изменить данные, жму на селект и выбираю другую опцию, то во-первых она не выбирается в самом селекте (остаётся старая), во-вторых новые данные не отправляются в инпут. Ты точно скопировал верно? <select id="siF2_2" onchange='bgfixed(true);' size="1"> Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8 |
fflesh, ой я дебил... А я скрипт скопировал поставил и всё. А в HTML onkeydown='bgfixed();' onkeyup='bgfixed();' убрал, а что к onchange ты добавил true не заметил.
Да, теперь работает как нужно)) И дальше по этой же теме. Смотри, к примеру я использую два поля в настройках. В одно мы вставляем ссылку на картинку (эта картинка потом будет фоном на персональной странице у пользователя) В другое вписываем цвет формата "#000000" это будет цвет фона. Ну и на персональной странице уже условием и переменными вывожу всё это дело куда нужно. Но я сейчас делаю фишку, что бы когда человек заходил в настройки, и менял значение полей, цвет, ссылку на картинку и другое, что бы изменения сразу вступали в силу, что бы можно было сразу посмотреть как оно будет выглядеть. В общем что я делаю, на странице редактирования профиля стоит это Код <body style="position:center; background:url(/diz/bg.png) 50% 0px #ededed repeat fixed"> А ниже такой скрипт Код $('body').attr('style','position:center; background:url('+$('#siF1').val()+') 50% 0px '+$('#siF3').val()+' '+$('#siF8').val()+' '+$('#siF7').val()+';'); При загрузки страницы с настройками, скрипт сразу вставляет фоновую картинку, цвет, указывает размножать картинку или нет и фиксировать её или нет. Все эти данные скрипт берёт из полей в которых всё это указано. Затем стоит такой скрипт: Код $('#siF1').keyup(function(){$('body').css('background','url('+$('#siF1').val()+') 50% 0px '+$('#siF3').val()+' '+$('#siF8').val()+' '+$('#siF7').val()+' ');};) $('#siF3').keyup(function(){$('body').css('background','url('+$('#siF1').val()+') 50% 0px '+$('#siF3').val()+' '+$('#siF8').val()+' '+$('#siF7').val()+' ');};) $('#siF7').keyup(function(){$('body').css('background','url('+$('#siF1').val()+') 50% 0px '+$('#siF3').val()+' '+$('#siF8').val()+' '+$('#siF7').val()+' ');};) $('#siF8').keyup(function(){$('body').css('background','url('+$('#siF1').val()+') 50% 0px '+$('#siF3').val()+' '+$('#siF8').val()+' '+$('#siF7').val()+' ');};) Что он делает, если человек вдруг решил поменять фоновую картинку, которая вставляется в поле с ID siF1 то скрипт сразу её обновит, и человек её увидит. Так же само и с цветом. Но вот с repeat и fixed проблемы. Cкрипт не обновляет данные из полей siF7 (fixed/scroll) и siF8 (repet/no-repet) по двум причинам. 1) keyup передаётся только если в ручную изменит в инпуте значение, а мы помним что визуально он вообще как бы скрыт, и значение вставляется в него из селекта. 2) после вставки скрипта который выводит данные из селекта в инпут и обратно, keyup не передаёт данные если даже в ручную их менять. Короче получилась куча скриптов и они друг друга забивают. Подскажи пожалуйста как решить проблему. Для наглядности скрин, что бы понятней было, а то я тут понаписал столько. В общем если я не понятно объяснил, поробую по конкретние Нужно что бы эта часть скрипта Код $('#siF7').keyup(function(){$('body').css('background','url('+$('#siF1').val()+') 50% 0px '+$('#siF3').val()+' '+$('#siF8').val()+' '+$('#siF7').val()+' ');};) $('#siF8').keyup(function(){$('body').css('background','url('+$('#siF1').val()+') 50% 0px '+$('#siF3').val()+' '+$('#siF8').val()+' '+$('#siF7').val()+' ');};) Работала. Когда я меняю в селекте значение, оно автоматически вставляется в инпут, а из инпута должно вставлятся в body что бы изменения сразу, так сказать, вступали в силу. Прикрепления:
0397597.jpg
(127.6 Kb)
Сообщение отредактировал Rad_van_Cor - Среда, 08 Май 2013, 15:50:32
|
Rad_van_Cor, fflesh, зачем так сложно?
Всё, что вам нужно это: Код <div style="display:none;">$ICQ_FL$</div> <select id="siF2_2" size="1" name="icq"> <option value="1000000">Не фиксировать</option> <option value="2000000">Фиксировать</option> </select> <script type="text/javascript">$('#siF2_2 option[value="'+$('#siF2').parent().remove().end().val()+'"]').attr('selected','selected');</script> Добавлено (08 Май 2013, 16:01:50) Добавлено (08 Май 2013, 16:04:10) Absit invidia verbo
|
|
| |||
| |||