我想在grails中调用jquery函数:每个元素,我在页面加载时使用函数调用来过滤具有循环的表,如下所示
<g:each in="${sampleTypes}" status="i" var="sampleType">
<div class="uniq">${sampleType}</div>
<table id="sampleTable">
<thead>
<tr>
<th class="no-sort"><g:message code="labWorkItem.testUnit.label"
default="CustomerId" /></th>
<th class="no-sort"><g:message code="labWorkItem.testUnit.label"
default="OrderNo" /></th>
<th class="no-sort"><g:message code="labWorkItem.testUnit.label"
default="DateCreated" /></th>
<th class="no-sort"><g:message code="labWorkItem.testUnit.label"
default="Test unit" /></th>
<th class="no-sort no-visible"><g:message
code="labWorkItem.sampleType.label" default="Sample Type" /></th>
</tr>
</thead>
<tbody>
<g:each in="${labWorkItemInstance}" status="a" var="labWorkItem">
<tr class="${(a % 2) == 0 ? 'even' : 'odd'}">
<td>
${labWorkItem?.order?.customer?.customerId}
</td>
<td>
${labWorkItem?.order?.orderNo}
</td>
<td>
${labWorkItem?.order?.dateCreated}
</td>
<td >
${labWorkItem?.testUnit}
</td>
<td id = "labSample">
${labWorkItem?.testUnit?.sampleType}
</td>
</tr>
</g:each>
</tbody>
</table>
<g:textField name="singleValue" value="Blood" id="someHiddenField"/>
</g:each>
我使用“uniq”类过滤表
function typeSampleCollected() {
jQuery.fn.dataTableExt.afnFiltering.push(function(oSettings, aData,
iDataIndex) {
if (oSettings.nTable.id != "sampleTable") {
return true;
}
var uniq = jQuery("div.uniq").html();
alert(uniq);
jQuery("#someHiddenField").val(uniq);
var someHiddenField = jQuery("#someHiddenField").val()
if(someHiddenField){
//var sampleValue = jQuery("#someHiddenField").val();
//alert(sampleValue.toString());
if (someHiddenField != aData[4]){
console.log("sampleType"+someHiddenField);
console.log("aData"+aData[4]);
return false;
}
}
else{
console.log("else condition");
}
return true;
});
}
问题是,它在第一次页面加载时执行,只有执行其他循环的第一个数据保持不变,我希望其余数据也能执行。
答案 0 :(得分:0)
jQuery + HTML答案。
您生成的HTML将会出错,因为ID“someHiddenField”将会重复。 id必须在HTML文档中是唯一的。查看要检查的文档的来源。复制到IDE或使用w3c validator进行检查。
获得唯一ID后,您需要迭代它们并运行过滤器。
我不确定是否通过过滤器将信息发送回服务器。即,文本血液仅导致与正在显示的血液有关的内容。我没有在您的代码中看到任何事件。代码不完整吗?
类似的事情 - 点击图标只显示与该课程相关的项目。查看代码:
<g:each in="${assetTypes}" status="i" var="assetType">
<li>
<a href="javascript:void(0)" name="assetTypeSelector" id="assetTypeSelector-${assetType.iconId}" class="icon-small-assetType-${assetType.iconId} ${(activeAssetType.id.toString()==assetType.id.toString()?' selected':'')}"><span class="atext">${assetType.name?.encodeAsHTML()}</span></a>
</li>
</g:each>
我使用delegate()将jQuery延迟绑定到click - 在1.7 jQuery之后使用go()。 javascript必须在grails视图中,因为我使用gsp标记。使用delegate(),它可以在任何地方:
/* Change asset types */
jQuery('body').delegate('[name=assetTypeSelector]', 'click', function() {
var newAssetIconId = jQuery(this).attr("id").split("-").pop();
// set the asset type.
${remoteFunction(controller: 'assetType', action: 'selector', name: 'assetTypeSelector', update: 'assetTypeSelector', params:'\'currentAssetTypeIconId=\' + newAssetIconId')}
});
或者我们在DataTables取得了很大的成功,这是一个更完整的解决方案。