Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2011, 14:59
Аватар для doniv
Аспирант
Отправить личное сообщение для doniv Посмотреть профиль Найти все сообщения от doniv
 
Регистрация: 02.03.2010
Сообщений: 73

Оптимизация очистки инпутов.
Здравствуйте. Теоретически часть задачи сводится к следующему.

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

Тут все просто:

var startSubject = $('#contact-form__subject').val();
    var startEmail = $('#contact-form__email').val();
    var startMessage = $('#contact-form__message').val();

    $('#contact-form__subject').focus(function() {
        if ($(this).val() == startSubject) {
            $(this).attr({value: ''});
            $(this).addClass('active-input');
        }
     });

    $('#contact-form__subject').focusout(function(){
        if ($(this).val() == '') {
            $(this).attr({value: startSubject});
            $(this).removeClass('active-input');
        }
    });


Но у меня несколько полей инпут в которых стандартное значение различается. Подскажите, пожалуйста, как оптимизировать процесс, чтобы для любого из инпутов для которых происходит фокус или его снятие выполнялась суть задачи.
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2011, 16:51
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

переписать ток под jquery.. кода будет меньше

заметил фигню у IE

'placeholder' in input


ошибок не выдает,а на этом месте спотыкается.. странно...

но стоило поставить это :

'placeholder' in document.createElement('input');


как он всё проглотил и работает ,как задумывалось

код снизу проверял в ie8

<input id="a" value="" placeholder="Введите свой email...">

<script>
// наше текстовое поле
var input = document.getElementById("a");

// поддержка placeholder
var supported =  'placeholder' in document.createElement('input');

if(!supported) {

// значение по-умолчанию
var defvalue = input.getAttribute('placeholder');

 //или аттач от jquery
 input.onfocus = input.onblur = function(e){
 
   if (!e) e = window.event;

   if( e.type === 'focus' ){

         // если поле заполнено знач. по умолч., то очищаем 
         if( input.value ===  defvalue ) input.value='';    

   } else {
        // если поле пустое, заполняем знач по умолч
        if( input.value.length === 0 ) input.value = defvalue;
   }
   return;
 }

// и заполняем значением по умолчанию, если надо
input.onfocus( {type:'blur'} )
}
</script>

Последний раз редактировалось melky, 06.07.2011 в 17:03.
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2011, 20:31
Аватар для doniv
Аспирант
Отправить личное сообщение для doniv Посмотреть профиль Найти все сообщения от doniv
 
Регистрация: 02.03.2010
Сообщений: 73

Сообщение от melky Посмотреть сообщение
переписать ток под jquery.. кода будет меньше

заметил фигню у IE

'placeholder' in input


ошибок не выдает,а на этом месте спотыкается.. странно...

но стоило поставить это :

'placeholder' in document.createElement('input');


как он всё проглотил и работает ,как задумывалось

код снизу проверял в ie8

<input id="a" value="" placeholder="Введите свой email...">

<script>
// наше текстовое поле
var input = document.getElementById("a");

// поддержка placeholder
var supported =  'placeholder' in document.createElement('input');

if(!supported) {

// значение по-умолчанию
var defvalue = input.getAttribute('placeholder');

 //или аттач от jquery
 input.onfocus = input.onblur = function(e){
 
   if (!e) e = window.event;

   if( e.type === 'focus' ){

         // если поле заполнено знач. по умолч., то очищаем 
         if( input.value ===  defvalue ) input.value='';    

   } else {
        // если поле пустое, заполняем знач по умолч
        if( input.value.length === 0 ) input.value = defvalue;
   }
   return;
 }

// и заполняем значением по умолчанию, если надо
input.onfocus( {type:'blur'} )
}
</script>
Разбирая код совсем запутался. У инпутов же у всех айдишники и классы разные. Под такое можно адаптировать ваш код?
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2011, 20:41
Аватар для doniv
Аспирант
Отправить личное сообщение для doniv Посмотреть профиль Найти все сообщения от doniv
 
Регистрация: 02.03.2010
Сообщений: 73

У меня есть свой логический вариант, но как его реализовать я не знаю и возможно ли это вообще. Если кто подскажет, что к чему, то буду очень рад.

В общем у меня есть инпуты с айдишники contact-form__subject, contact-form__email и contact-form__message.

У каждого из этих инпутов я беру value и вкладываю их в переменную, соответственно startSubject, startEmail, startMessage (это я делаю в любом случае, для еще кое-каких нужд).

В результате для одного такого инпута получается код:

$('#contact-form__subject').focus(function() {
        if ($(this).val() == startSubject) {
            $(this).attr({value: ''});
            $(this).addClass('active-input');
        }
     });



Таким образом, чтобы сравнивать value старых и новых элементов мне нужно заменять только $('#contact-form__subject') на нужный мне айдишник инпута и все будет хорошо, кроме одного:

if ($(this).val() == startSubject)


Мне еще нужно преобразовать переменную, в данном случае нужно взять start от название переменной и слово после __ у каждого айдишника.

Получается, что-то вроде:

if ($(this).val() == 'start' + 'как-то получить это значение после __') // И еще преобразовать полученную сумму строк в переменную.


Потом из этого сделать функцию в которую просто передавать айдишник поля по которому совершен клик.
Ответить с цитированием
  #5 (permalink)  
Старый 07.07.2011, 11:30
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Не надо сравнивать value. Нужно label с нужной надписью спозиционировать над инпутом и в нужные моменты времени его показывать/скрывать.
Ответить с цитированием
  #6 (permalink)  
Старый 08.07.2011, 09:44
Аватар для doniv
Аспирант
Отправить личное сообщение для doniv Посмотреть профиль Найти все сообщения от doniv
 
Регистрация: 02.03.2010
Сообщений: 73

Сообщение от Kolyaj Посмотреть сообщение
Не надо сравнивать value. Нужно label с нужной надписью спозиционировать над инпутом и в нужные моменты времени его показывать/скрывать.
Спасибо за совет, конечно, но дизайн не предусматриват label.
Задачу пока решил написанием функции, в которую просто кидаю переменные. Получилось конечно все равно к каждому инпуту свой запрос, но в одну строчку.
Ответить с цитированием
  #7 (permalink)  
Старый 08.07.2011, 09:45
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

разберись в том , что я тебе написал.разве это не подошло?
Ответить с цитированием
  #8 (permalink)  
Старый 08.07.2011, 09:50
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от doniv
Спасибо за совет, конечно, но дизайн не предусматриват label.
Причём тут дизайн? Я про реализацию, а не про внешний вид. Дизайн никакие теги не предусматривает.
Ответить с цитированием
  #9 (permalink)  
Старый 08.07.2011, 09:58
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Kolyaj Посмотреть сообщение
Причём тут дизайн? Я про реализацию, а не про внешний вид. Дизайн никакие теги не предусматривает.
он решил, наверное, что label будет нависать сверху ( выше ) инпута, а не над ним,заменяя плейсхолдер
Ответить с цитированием
  #10 (permalink)  
Старый 08.07.2011, 10:36
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

doniv, если рассматривать только новые браузеры - можно использовать возможности хтмл5

<input type='text' placeholder='Значение по умолчанию' />
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить все атрибуты всех инпутов shaltay jQuery 10 19.05.2017 15:07
суммирование значений двух текстовых инпутов при заполнении dolben Общие вопросы Javascript 4 19.08.2010 12:36
Описание инпутов внутри них. Madd Общие вопросы Javascript 2 12.08.2010 23:04
Проверка нескольких инпутов bagirov Общие вопросы Javascript 5 05.12.2008 16:34
Оптимизация скриптов object Ваши сайты и скрипты 9 21.07.2008 13:58