2014-02-05 3 views
3

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

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

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

Я попытался добавить var already_alert_me_once = true перед предупреждением, а затем поместить все внутри: if(already_alert_me_once == false), но это не помогло.

Я также попытался изменить $('#title').focusout(function() с $('#title').one('focusout', function(), который почти сделал трюк.

Вот мой текущий сценарий:

// When focus on title 


$('#title').focus(function() { 
    // Check if empty 
    if (!$(this).val()) { 
     $('#title').one('focusout', function() { 
      if ($(this).val()) { 
       alert("YEP"); 
      } 
     }); 
    } 
}); 

..и Here's a Fiddle

Так что мой вопрос; Как это сделать, предупреждение появляется только тогда, когда у вас есть что-то написано, а после этого никогда снова (если вы не перезагрузите страницу).

Надеюсь, вы поймете, что я имею в виду.

Спасибо - TheYaXxE

+0

опечатка, следует сказать '' on' не one' –

+1

@TomStyles 'one' означает его срабатывает только один раз. – Archer

+0

http://jsfiddle.net/rkumar670/T7tFd/6/ –

ответ

2

довольно много простое решение, нет необходимости в .one или фокус событий :)

$('#title').blur(function() { 
    if($(this).val()) { 
     alert('!!'); 
     $(this).unbind('blur'); 
    } 
}); 

http://jsfiddle.net/T7tFd/5/

+0

Также отличное решение! Я выбираю это, потому что это самое простое решение, как вы говорите себе :) – TheYaXxE

+0

рад, что я мог бы помочь;) – Alex

3

Вы можете отвязать фокус с помощью:

$('#title').unbind('focus'); 

Working Fiddle

+0

также, это работает, если не лучше, чем я опубликовал. –

+0

Отличное решение! спасибо :) – TheYaXxE

0

вместо того, чтобы поместить переменную "already_alert_me_once" внутри функции, сделать его глобальной переменной. таким образом, объем будет сохранен. вы также можете добавить атрибут в #title, который указывает, что он уже был нажат, а затем проверить, существует ли этот атрибут перед выполнением кода.

Смежные вопросы