我需要帮助尝试从 ag:select 语句中获取值并将它们传递给 JavaScript 函数。
到目前为止,我有按钮
<a href='javascript:void(0)' onclick='runReport("${reportInstance.name}")'>Run Report</a>
它调用了一个 .js 文件
function runReport(reportIn){
var url = reportViewerPath + reportDirectory + reportIn + reportSuffix + promptChain;
window.open(url,'Report Viewer','fullscreen=yes,menubar=yes,status=yes');
}
这很好用。现在的挑战是我们在主 .gsp 页面上有 g:select 语句,但它们的数量是可变的。可能没有,也可能有 20 个,这取决于最终用户选择的报告。
<g:select id="${prompt.name}" from="${listPromptValues[prompt.name]*.values().collect()}" name="prompt" value="" noSelection="['':'']"/>
这会生成下拉菜单,其中包含任何提示的值。
如何获取页面上每个提示的 ${prompt.name} 和选定值,然后也将其传递给 .js 文件?
理想情况下,当调用 runReport() 时,它将传递报告名称,并且提示将作为
&Phone=867-5309&City=NewYork&Name=Jenny
每个 url 变量都是一个可选的 g:select,所以它也可以是
&City=NewYork&Name=Jenny
我觉得像这个相关堆栈溢出问题这样的事情会走上正轨。
var prompts = "";
$('$prompt.name').change(function() {
prompts += $(this).text();
$("a").attr('href', function(i, h) {
return h + (h.indexOf('?') != -1 ? "&" : "?") + "selectValue="+val;
});
});
然而,提示必须是全局的,这样每次发生变化时它都不会被覆盖。
编辑:这是 .gsp 页面上的 DOM 对象
<div id="runButton">
<g:form controller="report">
<g:if test="${reportInstance?.id}">
<a href='javascript:void(0)' onclick='runReport("${reportInstance.name}")'>Run Report</a>
</g:if>
</g:form>
</div>
<ol class="property-list report">
<g:if test="${reportInstance?.prompts}">
<hr>
<li class="fieldcontain" id="prompt">
<g:each var="prompt" in="${reportInstance.prompts}">
<span id="prompts-label" class="property-label">
<g:message code="report.prompts.label" default="${prompt.description}:" />
</span>
<g:if test="${prompt.datatype.type == 'DropDown'}">
<g:select id="${prompt.name}" from="${listPromptValues[prompt.name]*.values().collect()}" name="prompt" value="" noSelection="['':'']"/>
<br>
</g:if>
</g:each>
</li>
</g:if>
</ol>
然后在 run.js
function runReport(reportIn){
var promptChain = $("#prompt :select[name=prompt]").serialize();
reportName = reportIn;
...
}
我做错了吗?
编辑 2: 抓住它应该的提示
...
<g:if test="${prompt.datatype.type == 'DropDown'}">
<g:select id="${prompt.name}" from="${listPromptValues[prompt.name]*.values().collect()}" name="${prompt.name }" value="" noSelection="['':'']"/>
<br>
</g:if>
...
和 jQuery
var promptChain = jQuery('select').serialize();