Grails, как получить значение моей формы / текстового поля внутри каждого - PullRequest
1 голос
/ 22 ноября 2011

У меня есть этот код, где я хочу сравнить значение из базы данных со значением, введенным пользователем в поле формы

   function checkFromIndex(form){           
       <g:each in="${index}">
           <g:if test="${it.indexDate == form.endDate.value}">
               alert("pass")
           </g:if>
       </g:each>         
   }

но когда я использую это выражение if, оно никогда не распознает этот form.endDate (вне каждого, что он делает)

Любое решение

Спасибо

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Теги Grails оцениваются на стороне сервера, прежде чем отправлять вашу страницу в браузер. Таким образом, вы не можете использовать переменные javascript или функции внутри них. Вот почему вы неправильно используете выражение JS form.endDate.value внутри <g:if>.

Они все еще могут использоваться для создания javascript, который должен оцениваться на стороне клиента. Вы можете написать свою функцию так:

function checkFromIndex(form) {
    <g:each in="${index}">
        if (${it.indexDate} == form.endDate.value) {
            alert("pass")                       
        }
    </g:each>
}

Таким образом, оценка <g:each> на стороне сервера приводит к генерации тела для checkFromIndex с одним оператором JS if для каждой indexDate в переменной модели index. Имейте в виду, что для больших index результирующий HTML будет длинным; вы можете рассмотреть вывод index в виде массива JS и использовать вместо него метод indexOf:

function checkFromIndex(form) {
    if (${index*.indexDate as JSON}.indexOf(form.endDate.value) >= 0) {
        alert("pass")                       
    }
}
1 голос
/ 22 ноября 2011

Мое быстрое решение:

function checkFromIndex(form){
  var endDate = form.endDate.value; //have to be Numeric type
  var lst = ${[[id:1,indexDate:new Date().getTime()],[id:2,indexDate:new Date().getTime()],[id:3,indexDate:new Date().getTime()]] as grails.converters.JSON}
  jQuery.each(lst, function(i,v) { if (v.indexDate == endDate) {alert ('pass!')}});
}
0 голосов
/ 22 ноября 2011

Поместите исходное значение в скрытое поле в html-форме, а затем выполните обычную процедуру javascript, которая сравнивает исходные значения (= значение скрытого поля) с фактическими введенными значениями, например:

function validate() {
    var result = true;        
    $(".originalValue").each(function(i, item) {
         var inputName = $(item).attr("name").replace("_original", "");
         if ($(item).val() != $("#"+inputName).val()) {
            result = false;
         }
    });
    if (result) alert("Everything the same");
}

Ваша форма будет выглядеть так:

<g:textField name="date" value="${date}"/>
<g:hiddenField name="date_original" class="orginalValue" value="${date}" />

Если имена вашего входного элемента содержат "." вам нужно их избежать, прежде чем вы сможете выбрать их, используя $(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...