Grails如何在每个内部获取表单/文本框值

时间:2011-11-22 05:03:42

标签: javascript grails

我有这个代码,我希望将数据库中的值与用户在表单字段中输入的值进行比较

   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 个答案:

答案 0 :(得分:2)

在将页面提供给浏览器之前,

Grails标记在服务器端进行评估。所以你不能在其中使用javascript变量或函数。这就是你在form.endDate.value中使用JS表达式<g:if>不正确的原因。

它们仍可用于生成要在客户端评估的javascript。你可以这样编写你的函数:

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

这样,<g:each>的服务器端评估会为checkFromIndex生成一个主体,if模型变量中的每个indexDate都有一个JS index语句。请记住,对于较大的index生成的HTML将会很长;您可能需要考虑将index输出为JS数组,而是使用其indexOf方法:

function checkFromIndex(form) {
    if (${index*.indexDate as JSON}.indexOf(form.endDate.value) >= 0) {
        alert("pass")                       
    }
}

答案 1 :(得分:1)

我的快速解决方案:

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!')}});
}

答案 2 :(得分:0)

将原始值放入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}" />

如果输入元素的名称包含“。”你需要逃避这些,然后才能使用$(...)选择它们。