2012-06-06 1 views
3

Можно ли создать валидацию с использованием javascript, который будет реализован в свойстве onCLick тега grails '<g:submitButton>? Я использую веб-поток для перехода с одной страницы на другую. Вот мой код для кнопки Далее:Проверка на grails submitButton

<g:submitButton class="btn btn-primary" name="next" value="Next" onclick="return isfilipinoCitizen()"></g:submitButton> 

Функция isfilipinoCitizen находится на моем яваскрипте кода:

   <script type="text/Javascript">      
       function isfilipinoCitizen() {  
        var selected = "${accountInfo?.filipinoCitizen}"; 
         if(selected == "1"){ 
          return true; 
         }else{ 
          alert(selected) 
          alert("You must be a Filipino citizen to register!") 
          document.location.href = "myhomepage"; 
         } 
       } 
       </script> 

То, что я хотел сделать здесь, чтобы предотвратить страницу от перехода к следующей странице если вход пользователя равен 0 и перенаправить пользователя на домашнюю страницу системы. Но казалось, что это совсем не работает.

Любая помощь от вас, ребята, высоко ценятся.

Спасибо!

+1

Этот вопрос не относится к grails groovy или spring, но о проверке формы js. – GalmWing

+0

Возможный дубликат [Как использовать кнопку отправки в grails с инструкцией if-else?] (Http://stackoverflow.com/questions/10891165/how-to-use-submit-button-in-grails-with-if- else-statement) –

ответ

6

Прежде всего, я думаю, вы должны использовать Firebug, чтобы проверить, что на самом деле отображается как html. Это также помогает выявить некоторые ошибки JavaScript или ресурсы с невыполнением нагрузки.

Во-вторых, вы должны проверить, вызван ли javascript в первую очередь, разместив alert('come here'); в начале isfilipinoCitizen(). После этого, предупреждение в первом условии. Javascript это особый язык, мы должны быть осторожны при работе с ним :):

   <script type="text/Javascript">      
       function isfilipinoCitizen() {  
        alert("come here"); 
        var selected = "${accountInfo?.filipinoCitizen}"; 
         if(selected == "1"){ 
          alert("come there"); 
          return true; 
         }else{ 
          alert(selected) 
          alert("You must be a Filipino citizen to register!") 
          document.location.href = "myhomepage"; 
         } 
       } 
       </script> 

наконец (после того, как вы гарантировать, что ваш Javascript функция дозвонились правильно), вы должны сделать больше, чем «document.location.href «для предотвращения отправки формы. Для быстрого эффекта я бы рекомендовал jQuery и onSubmit() event. Если вы любите чистый яваскрипт решения, вы можете следить за решением, которое Galm и Ануй предложить: положить onsubmit в тег:

<g:form name="myForm" action="myaction" onsubmit="return isfilipinoCitizen()">...</g:form> 

В неисправном случае, пожалуйста, не забудьте вернуть ложные :)

P/s: Вставка ${accountInfo?.filipinoCitizen} непосредственно в javascript может работать, но это не лучшая практика. Лучше переносить «isFilipinoCitizen» в качестве параметра функции javascript.

Другое соображение удобства использования: если вы уже знаете, какой пользователь имеет право регистрироваться, почему мы должны ждать, пока пользователь заполнит всю форму, чтобы сообщить им, что они должны быть гражданами Филиппин? Почему пользователи не уведомляются раньше (после загрузки страницы)?

+0

да большое вам спасибо за этот совет! :) – chemilleX3

2

Попробуйте onsubmit вместо этого.

<g:submitButton class="btn btn-primary" name="next" value="Next" onsubmit="return isfilipinoCitizen()"></g:submitButton> 

И в вашей функции возврата true или false.

+0

большое вам спасибо! Но после того, как вы внесли свои предложения, ничего не произошло, он все равно переходит к следующей странице, даже после того, как не прошел проверку. – chemilleX3

+3

обработчик onsubmit должен быть прикреплен к тегу формы, а не submitButtom –

+1

@AnujArora верен.У вас может быть более одной кнопки отправки, и вы не захотите забыть атрибут onsubmit на одном из них. – vegemite4me