我有这个代码,我希望将数据库中的值与用户在表单字段中输入的值进行比较
function checkFromIndex(form){
<g:each in="${index}">
<g:if test="${it.indexDate == form.endDate.value}">
alert("pass")
</g:if>
</g:each>
}
但是当我使用这个if语句时,它永远不会识别这个form.endDate(在每个它之外)
任何解决方案
谢谢
答案 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}" />
如果输入元素的名称包含“。”你需要逃避这些,然后才能使用$(...)
选择它们。