Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очистка формы от дефолтных значений js (https://javascript.ru/forum/misc/10396-ochistka-formy-ot-defoltnykh-znachenijj-js.html)

hereim 02.07.2010 13:57

Очистка формы от дефолтных значений js
 
Всем добрый день, возник спор с программистом:
необходим очищать в полях формы дефолтные значения перед передачей на сервер, но программист требует делать это js, серверной части для этого нет.
Хочу услышать аргументы, почему это правильно и неправильно.
Я считаю что это в корне неправильно
Мои аргуметы - 1. не работает без js
2. js не должен выполнять такой функционал
3. если в дополнение к серверной части, то код становится избыточным, и просто не нужен(я не про проверку ошибок, а иммено об очистки слова Улица в поле Адресс, если оно там было по дефолту)
4. криво смотрятся поля, которые становятся пустыми при сабмите формы.

Если есть примеры с формами, в которых поля от дефолтных значений очищаются именно таким способом - скиньте , пожалуйста, ссылкку.

Спасибо, за советы

Kolyaj 02.07.2010 14:07

Вы не на том уровне проблему решаете. У вас проблема в том, что дефолтные значения не являются корректными. Насколько я понимаю, вы метки в поля засунули, т.е. они вообще значениями не являются. Надо просто не совать в поля то, что не может являться их значением.

hereim 02.07.2010 14:09

да, Вы правильно поняли. Ну а что делать в том случае, если в полях должны стоять метки

Kolyaj 02.07.2010 14:09

Метки должны оставаться тегом label, просто их можно спозиционировать над полем ввода. При этом можно и учесть включенность JS, посмотрите форму логина на морде Яндекса, например.

x-yuri 03.07.2010 07:55

Kolyaj, по-моему ты не понял (ну или я чего-то не понял). Речь идет о том, что в поле с меткой Адрес вставляется слово Улица. Так вот его можно вставлять и убирать с помощью js, при этом не надо будет делать на сервере ненужный, не очень очевидный, привязанный к страничке код типа if( $_POST['address'] == 'Улица' ) unset($_POST['address']); Так что я голосую за программиста

PeaceCoder 03.07.2010 09:46

hereim,
Такая процедура по любому должна выполнятся на сервере. Привыкайте править все данные на сервере. То что приходит с клиента - доверять нельзя.
А вообще
Цитата:

Сообщение от Kolyaj
Метки должны оставаться тегом label, просто их можно спозиционировать над полем ввода.

На крайний случай сделать подсказку при фокусирвке в поле.

subzey 03.07.2010 12:12

Подсказки, всё-таки, относятся к отображению, и их вычистка не должна происходить на сервере. Иное дело, что и засорять ими форму не стоит.
Я вижу три способа решения.
Первый - использовать аттрибут placehoder, но его, кажется, кроме вебкита никто не умеет.
Второй - предложенный Kolyaj.
Третий - вставлять-таки значения в элементы формы, но яваскриптом и из аттрибута title (или того же placeholder), а затем тщательно проверять onfocus и onblur и производить манипуляции со значением элемента.
Отлавливать события фокуса и блара для всех элементов можно через события onbeforeactivate и ondeactivate в ИЕ версии ниже 9 и через фазу capruring в нормальных браузерах.

x-yuri 03.07.2010 17:04

Цитата:

Сообщение от PeaceCoder
Такая процедура по любому должна выполнятся на сервере. Привыкайте править все данные на сервере. То что приходит с клиента - доверять нельзя.

при чем тут доверять/не доверять?

Kolyaj 04.07.2010 09:25

Цитата:

Сообщение от x-yuri
Речь идет о том, что в поле с меткой Адрес вставляется слово Улица. Так вот его можно вставлять и убирать с помощью js, при этом не надо будет делать на сервере ненужный, не очень очевидный, привязанный к страничке код типа if( $_POST['address'] == 'Улица' ) unset($_POST['address']);

Вот это я точно не понял.

x-yuri 04.07.2010 09:55

как-то так
<input type="text" id="address">
<script type="text/javascript">
    var hint = 'Улица';
    var address = document.getElementById('address');
    address.value = hint;
    document.forms[0].onsubmit = function(){
        var address = document.getElementById('address');
        if( address.value == hint )
            address.value = '';
    }
    address.onfocus = function(){
        if( this.value == hint )
            this.value = '';
    }
    address.onblur = function(){
        if( this.value == '' )
            this.value = hint;
    }
</script>

иначе на сервере нужен код типа
if( $_POST['address'] == 'Улица' ) 
    unset($_POST['address']);

который добавляет еще одну зависимость между страничкой (внешний вид) и обработчиком формы (контроллер) и без него можно обойтись


Часовой пояс GMT +3, время: 08:42.