Событие OnBlur и OnFocus не работает должным образом

Привет, я пытаюсь заставить работать свои функции onblur и onfocus, но они, кажется, не делают правильную вещь - я пытаюсь сказать, если поле «полное имя» пусто, тогда поместите «полное имя» в поле и если кто-то что-то ввел, оставьте как есть. На данный момент он очищает поле, если оно говорит «Полное имя», а если оно пустое, оно вводит «Полное имя». Но моя проблема в том, что всякий раз, когда кто-либо что-либо вводит, он продолжает вводить «Полное имя» в поле.

Вот код, который я использую

function doFocusNew() { if ($('.fullname').val() != null && $('.address').val() != null) { $('.fullname').val('' ) } };

function doBlurNew() { if ($('.fullname').val() != null && $('.address').val() != null) { $('.fullname').val('Full Имя') } };

Привет Джейми


person Jamie Taylor    schedule 21.06.2010    source источник


Ответы (1)


Значения из .val() никогда не будут равны null, это будут пустые строки, поэтому вам нужно немного регулировки. Я думаю, что вам нужно:

function doFocusNew() { 
  if ($('.fullname').val() == 'Full Name') {
    $('.fullname').val(''); //focused, "Full Name" was there, clear it
  } 
}
function doBlurNew() { 
  if ($('.fullname').val() == '') { 
    $('.fullname').val('Full Name'); //blurred, nothing there, put "Full Name" in
  } 
}

Если это текстовые поля, вот полная/компактная версия:

$(function() {
  $('.fullname').focus(function() {
    if(this.value === 'Full Name') this.value = '';
  }).blur(function() {
    if(this.value === '') this.value = 'Full Name';
  });
});

Обновление: поскольку вы добавляете их динамически:

$(function() {
  $('.fullname').live('focus', function() {
    if(this.value === 'Full Name') this.value = '';
  }).live('blur', function() {
    if(this.value === '') this.value = 'Full Name';
  });
});

Убедитесь, что у вас есть все исправления ошибок, например. в последнем выпуске jQuery 1.4.2, чтобы это работало, я вижу, что вы сейчас используете 1.4.0.

person Nick Craver    schedule 21.06.2010
comment
Привет, спасибо за быстрый ответ, он по-прежнему удаляет все, что пользователь помещает в поле, и заменяет его полным именем. Кажется, он игнорирует бит, говорящий, что он пуст. - person Jamie Taylor; 21.06.2010
comment
@ Джейми - твой старый обработчик все еще подключен? Убедитесь, что не запущена другая функция... если вы используете первую функцию, а не мою последнюю версию, .val() получит значение первого поля .fullname, если у вас больше чем один это будет проблемой, это так? - person Nick Craver; 21.06.2010
comment
Привет, вот ссылка на то, что я делаю, поле полного имени не должно удалять то, что вводит пользователь - hpb.co.uk/opendays/map/default3.aspx Спасибо. - person Jamie Taylor; 21.06.2010
comment
@ Джейми - я добавил решение для этого ... вы добавляете их динамически, и добавляете их много, это множественная проблема, о которой я говорил. Просто удалите onFocus="doFocusNew();" onBlur="doBlurNew();" из разметки и используйте ответ .live(), который у меня есть выше. Также не забудьте обновить jQuery до версии 1.4.2, чтобы .live() работало с событиями focus и blur (в противном случае вам нужно будет использовать focusin и focusout). - person Nick Craver; 21.06.2010