andrystepa
Помогающий
Offline
|
|
« : 22-08-2008 09:57 » |
|
Задача такая - есть выпадающий список деталей. Если в списке детали не окажется, ее можно добавить в находящемся рядом текстовом поле. Хотелось бы сделать так, чтобы рядом с каждым из полей (списком и полем ввода) стоял радио переключатель выбирающий, в каком из полей будет вводиться информация. Причем его переключение активировало бы соответствующее поле ввода(список или текстовое поле), и деактивировало другое. Реально ли сделать это средствами PHP и HTML? Если реально, то как? Подскажите пожалуйста!
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 22-08-2008 10:11 » |
|
js скрипт тебе в помощь
PHP - работает на стороне сервера На стороне клиента - это организовывается с помощью js
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #2 : 22-08-2008 12:45 » |
|
Только для элементов формы: document.getElementById('....').disabled = true; или (менее предпочтительный вариант) document.forms.имя_формы.имя_поля.disabled = true;
|
|
« Последнее редактирование: 25-08-2008 11:46 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Chuda
Гость
|
|
« Ответ #3 : 22-08-2008 14:36 » |
|
только если вспомнить про юзабилити…
|
|
|
Записан
|
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #4 : 25-08-2008 11:32 » |
|
К сожалению о javascript у меня весьма маленькое представление. Можно ли в эту конструкцию: <form action="insproj.php" method="post"> <table> <tr> <td>Выбрать проект: <br> <select name="selprj"> <option value="ТПЧ">"ТПЧ"</option> <option value="ТПУ">"ТПУ"</option> <option value="ТПМ">"ТПМ"</option> <option value="ТПО">"ТПО"</option> </select> </td> </tr> <tr> <td> или введите <br> название нового проекта: <br> <input type="text" name="selprj" size="25" maxlength="50"> </td> <tr> </table> </form>
Добавить код document.forms.имя_формы.имя_поля.disabled = true;
так, чтобы сначала деактивировать текстовое поле ввода, а при необходимости, по нажатии кнопки (прошу прощения, кнопку в коде забыл сделать), активировать его. Я собственно даже не знаю, куда на странице этот код можно добавлять. Имя_поля, это как я понимаю, selprj, а вот что такое Имя_формы? В тех справочниках, что у меня под рукой ничего толкового про иерархию классов нету.
|
|
|
Записан
|
|
|
|
Chuda
Гость
|
|
« Ответ #5 : 25-08-2008 12:59 » |
|
нельзя. и вообще, до поры до времени забудь про такое понятие, как «имя формы» помни про волшебное слово getElementById document.getElementById('id_поля').disabled = true;
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #6 : 25-08-2008 13:12 » |
|
<select name="selprj" id="selprj"> <input type="text" name="selprj" id="selprj" size="25" maxlength="50"> Добавь два радиобатона в одну группу. Повесь на изменение обоих скрипт, где будешь запрещать одно поле и разрешать другое. На стороне сервера проверяй, какой радиобатон был активен и обрабатывай соотв. поле.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Chuda
Гость
|
|
« Ответ #7 : 25-08-2008 13:28 » |
|
хотя вот реально не стоит так делать. сделать просто селект и текстовое поле. если текстовое поле заполнено, значит его значение берём. если нет — из селекта.
а не то получится юзабилити-кошмар
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #8 : 25-08-2008 15:28 » |
|
Шильгия, с пользовательской точки зрения это интуитивно понятнее. В GUI вне web такие заморочки сплош и рядом.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #9 : 25-08-2008 16:42 » |
|
RXL, Собственно так я и хотел сделать. Не хватало лишь той самой функции, которая запрещает одно из полей. Спасибо. Завтра попробую что получилось. Если не ошибаюсь - как я уже говорил с javascript мне мало знаком, чтобы все это работало надо в HEAD запихнуть что-то вроде script language="JavaScript".
|
|
« Последнее редактирование: 25-08-2008 16:46 от andrystepa »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #10 : 25-08-2008 17:27 » |
|
andrystepa, не забывай, что не тользо запрещать надо, но и наоборот. <script type="text/javascript">....программа....</script> или <script type="text/javascript" src="ссылка на файл с программой"></script> Не обязательно в head. Но функции должны быть объявлены раньше, чем будут использованы.
|
|
« Последнее редактирование: 25-08-2008 17:30 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #11 : 26-08-2008 06:46 » |
|
Сделал пробный файл. Код такой: <html> <head> <title>JAVASCRIPT</title> </head> <body bgcolor='tan'> <script language="JavaScript"> <!-- Замаскировались function SelectInput1() { document.getElementById('selprj2').disabled = true; document.getElementById('selprj1').enabled = true; } function selectInput2() { document.getElementById('selprj1').disabled = true; document.getElementById('selprj2').enabled = true; } //Демаскировались --> </script>
<center> <h1>ПРИМЕР JAVASCRIPT</h1> </center> <br> <br> <select name="selprj1" id="selprj1"> <option value="ТПЧ">"ТПЧ"</option> <option value="ТПУ">"ТПУ"</option> <option value="ТПМ">"ТПМ"</option> <option value="ТПО">"ТПО"</option> </select> <input type = "radio" name = "sel" value = "select1" onClick="selectInput1()"> ВЫБРАТЬ ИЗ СПИСКА <br> ИЛИ <br> <input type="text" name="selprj2" id = "selprj2" size="25" maxlength="50"> <input type = "radio" name = "sel" value = "select2" onClick="selectInput2()"> ВВЕСТИ НОВОЕ НАЗВАНИЕ ПРОЕКТА </body> </html>
Возможно в функциях я что-то и напортачил - я не нашел описания getElementById, поэтому enabled подставил по аналогии. Впрочем не в этом главное. Когда я открываю файл и выбираю радиобатоном выпадающий список - с текстовым полем ввода ничего не происходит. А вот когда выбираю текстовое поле - список деактивируется. И если даже после этого опять выбрать выпадающий список - он все равно не активен. А текстовое поле активно всегда. Что не так?
|
|
|
Записан
|
|
|
|
Chuda
Гость
|
|
« Ответ #12 : 26-08-2008 09:24 » |
|
а вот тебе занимательный джаваскрипт в картинках http://slil.ru/26089336чего-то там не работает, но чего именно — как понять?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #13 : 26-08-2008 10:21 » |
|
andrystepa, нет свойства enabled! Как по твоему, нафига присваивать disabled = true ?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #14 : 26-08-2008 10:50 » |
|
RXL, Поставил вместо enabled = true disabled = false - ничего не изменилось! Все также список затеняется, а текстовое поле нет. Затенение со списка не снимается.
|
|
|
Записан
|
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #15 : 26-08-2008 11:15 » |
|
Шильгия, Большое спасибо! У меня браузеры только IE и Opera. Правда в Линуксе пользуюсь Файрфоксом, да вот про эту его замечательную возможность до сих пор не знал. Да, верно, дело в прописной букве. Но меня все-же несколько успокаивает то, что не я один не заметил эту ошибку Еще раз спасибо всем!!
|
|
|
Записан
|
|
|
|
Chuda
Гость
|
|
« Ответ #16 : 26-08-2008 18:44 » |
|
andrystepa, файерфоксом (ну или другой адекватной мозиллой) лучше пользоваться в первую очередь. Во-первых, это браузер, наиболее правильно обрабатывающий код, наиболее соответствующий спецификациям. Во-вторых, в нём наибольшее количество инструментов для разработчика, таких как консоль ошибок, DOM-инспектор, ну и всяческие расширения, которые я перечислять не буду, ибо и так много подобных описаний в инете.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #17 : 27-08-2008 06:27 » |
|
andrystepa, извини за выражение, но попробуй приложить руки к транспортиру - измерь кривизну. Найди 10 отличий. Сделай выводы. <html> <head> <title>JAVASCRIPT</title> </head> <body> <script type="text/javascript">
function selectInput1() { document.getElementById('selprj1').disabled = false; document.getElementById('selprj2').disabled = true; }
function selectInput2() { document.getElementById('selprj1').disabled = true; document.getElementById('selprj2').disabled = false; }
</script> <form> <select name="selprj1" id="selprj1"> <option value="ТПЧ">"ТПЧ"</option> <option value="ТПУ">"ТПУ"</option> <option value="ТПМ">"ТПМ"</option> <option value="ТПО">"ТПО"</option> </select> <input type="text" name="selprj2" id = "selprj2" size="25" maxlength="50"> <br> <input type = "radio" name = "sel" value = "select1" onclick="selectInput1();"> <input type = "radio" name = "sel" value = "select2" onclick="selectInput2();"> </form> </body> </html>
|
|
« Последнее редактирование: 27-08-2008 06:29 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Chuda
Гость
|
|
« Ответ #18 : 27-08-2008 08:02 » |
|
RXL, смотри, а то и в этом коде можно замерить кривизну и она будет ненулевой.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #19 : 27-08-2008 15:25 » |
|
Шильгия, это по быстрому - из его кода сотворил. Работает, ошибок в консоли нет - значит можно считать пример корректным.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|