2011-02-02 3 views
0

У меня это прекрасно работает с использованием 1 вызова onClick (выполняется проверка по электронной почте).Объединить 2 элемента внутри onClick

<script type='text/javascript'> 
function emailValidator(elem, helperMsg){ 
    var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; 
    if(elem.value.match(emailExp)){ 
     return true; 
    }else{ 
     alert(helperMsg); 
     elem.focus(); 
     return false; 
    } 
} 
</script> 

В теле моей страницы

<a href="#" 
    title="Yes, Count Me In!" 
    onclick="emailValidator(document.getElementById('email'), 'Please Enter A Valid Email'); return false;" 
> 

----> Теперь, можно ли выполнить условие для этого OnClick? Если поле электронной почты действительно, запустите этот другой дополнительный вызов (rsvp ('да');).

<a href="#" 
    title="Yes, Count Me In!" 
    onclick="emailValidator(document.getElementById('email'), 'Please Enter A Valid Email'); rsvp('yes'); return false;" 
> 

ответ

0

Да, это возможно, но это, вероятно, не поможет, как вы этого хотите. Кроме того, ваш код будет вызывать функцию rsvp-function, которую вы получаете от функции emailValidator. Вы, вероятно, хотите сделать что-то вроде этого:

<a href="#" title="Yes, Count Me In!" onclick="if(emailValidator(document.getElementById('email'), 'Please Enter A Valid Email')){rsvp('yes');};return false;"> 

Другой умный намек для вас, чтобы заменить document.getElementById -часть с this, например, так:

<a href="#" title="Yes, Count Me In!" onclick="if(emailValidator(this, 'Please Enter A Valid Email')){rsvp('yes');};return false;"> 

Это должно убедиться, что даже если переименовать идентификатор ввода, он все равно будет работать. Когда внутри onclick, или onchange или что-то еще, это всегда ссылается на объект, щелкнув/отредактированный/и т. Д.

Также, как было предложено другими, я рекомендую сделать функцию, которая сделает это за вас, но я знаю людей, которые любят вкладывать всю свою логику в обработчик onclick, и поскольку это то, о чем вы просили, Думаю, я покажу, как это сделать. Однако следует отметить, что это становится грязным быстро, и делать что-то вроде

function rsvpClick() { 
    if(emailValidator(document.getElementById('email'), 'Please Enter A Valid Email')) rsvp('yes'); 
} 

, а затем

<a href="#" title="Yes, Count Me In!" onclick="rsvpClick();"> 

обычно является гораздо более чистым и читаемым.

+0

Спасибо Alxandr, это отлично сработало для моей ситуации! – detonate

0

сделать глобальную функцию, которая использует логику и вызывать эту функцию в вашем OnClick событие

2
<a href="#" title="Yes, Count me In!" onclick="myFunction"> 

<script> 
    function myFunction() { 
     var elem = document.getElementById("email"); 
     emailValidator(elem, 'Please Enter A Valid Email') && rsvp('yes'); 
    } 

    var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; 

    function emailValidator(elem, helperMsg){ 
     return elem.value.match(emailExp) ? 
      true : 
      (alert(helperMsg), elem.focus(), false); 
    } 

</script> 

Первый абстрактном что OnClick код для глобальной функции. Затем проверьте подлинность электронной почты и запустите только функцию rsvp, если письмо действительно (т. Е. Оно возвращает true)

-1

Вы можете просто добавить вызов своей функции rsvp(), если она прошла проверку. Например:

function ValidateAndRSVP(elem, helperMsg){  
    var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;  
    if(elem.value.match(emailExp)){ 
     rsvp('yes');  
     return true;  
    } 
    else{   
     alert(helperMsg);   
     elem.focus();   
     return false;  
    } 
} 
+0

Это дурная идея, так как emailValidator - это имя функции, которое реализует все, что он делает, это проверка адреса электронной почты. Вы должны разделить это на две функции или переименовать их в нечто, что имеет смысл. – Alxandr

+0

@Alxandr Как это отличается от того, что вы предлагаете? имя функции? Мое намерение состоит в том, чтобы предоставить ОП решение внутри его собственного кода и понять, что не переписывать всю его функцию или код, если это необходимо. В этом ответе нет ничего плохого, за исключением того, что это не «Лучшая практика». – Victor

+0

Да, если он использует функцию emailValidator, любое другое место, которое все испортило бы. Это так просто. Не только о лучшей практике, если бы об этом было много, но добавление чего-то, что не имеет никакого отношения к проверке на функцию валидатора, - плохая идея.Это не отсутствие лучшей практики, это просто неправильно делать, и в конечном итоге вызывает много путаницы и, как правило, дублирование кода. – Alxandr

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