2013-01-23 2 views
3

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

HTML

<label for="email">Enter email for updates:</label> 
<input type="text" name="email" id="email" placeholder="[email protected]" /> 
<button name="submit" type="submit">Submit</button> 

JS

$(document).ready(function() { 

    $('button').hide(); 

    $('input').keyup(function() { 
    if(!validateEmail(email)){ 
     $('button').show(); 
    } 
    }; 

    function validateEmail(email) { 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailReg.test(email); 
    } 

}); 

Я не ищу для того, чтобы быть лучшей проверка электронной почты, а только простой способ показать пользователь, когда форма выглядит правильно.

Любая помощь с благодарностью получена.

+0

Ослабьте свое регулярное выражение. Электронная почта может быть [email protected] или [email protected] Вероятно, еще один бит '[\ w - \.] +' После @ будет найден. –

+1

Почему вы показываете кнопку, когда сообщение недействительно? – danronmoon

ответ

6

5 проблем:

  1. ошибка синтаксиса (вы должны взглянуть на ваш console когда что-то не работает)
  2. не делают кнопки исчезают, когда вход не действует больше
  3. вы не действительно проверить ввод (благодаря Eli)
  4. не проверять электронную почту «» не является пустым
  5. некоторых действительный адрес электронной почты отклоняется от вашего регулярного выражения (попробуй "valid email"@example.com)

Мое предложение для первых четырех задач:

$('button').hide(); 
    $('input').keyup(function() { 
    if(validateEmail($(this).val())){ 
     $('button').show(); 
    } else { 
     $('button').hide(); 
    } 
    }); 

    function validateEmail(email) { 
    if (!email) return false; 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailReg.test(email); 
    } 

Demonstration

Для последней задачи, я предлагаю вам прочитать Stop Validating Email Addresses With Your Complex Regex.

+0

Это не все. Переменная 'email' не установлена ​​нигде. Поэтому его вызов 'validateEmail' не будет работать. 'validateEmail ($ ('# email'). val())' тогда мы говорим! Не стесняйтесь редактировать свой ответ, чтобы включить это изменение. Если нет, я отправлю другой ответ для справки. –

+0

@EliGassert Вы правы. Я предлагаю вам построить ответ. –

+0

+1 Хорошие обновления. Это, кажется, самый полный ответ. –

3

Помогите с тем, что говорит дистор, есть синтаксическая ошибка. Но кроме того, вы не устанавливаете свою переменную email при вызове validateEmail. Я также сделал ядро ​​более конкретным, по словам Стива. Вот обновленный код.

$('#email').keyup(function() { 
    var email = $(this).val(); 

    if(validateEmail(email)){ 
     $('button[type="submit"]').show(); 
    } 
    else { 
     $('button[type="submit"]').hide(); 
    } 

    }); 
+0

+1 от меня, поскольку я не выглядел достаточно;) –

+0

Метод validateEmail возвращает true, когда письмо действительно, поэтому ваша логика отменена.Кроме того, почему вы проверяете, когда текст вводится в другие поля ввода? – Fenton

+0

Я просто изменил то, что было там, но я согласен с тобой, Стив. Я изменю ответ, чтобы быть более правильным. –

0

Благодаря dystroy, Эли Gassert & danronmoon. Здесь загружаются различные ошибки, которые вы, ребята, указали. Для справок в будущем это код из ваших разных исправлений, который теперь работает для меня:

$('button').hide(); 

$('input').keyup(function() { 
    var email = $('#email').val(); 

    if(validateEmail(email)){ 
     $('button').show(); 
    } else { 
     $('button').hide(); 
    } 
}); 

function validateEmail(email) { 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailReg.test(email); 
} 
Смежные вопросы