繁体   English   中英

将动态Grails g:select值发送到JavaScript

[英]Send dynamic Grails g:select values to JavaScript

我需要帮助来尝试从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()时,它将传递reportName,并且提示将作为

&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();

您使用的是jQuery,因此只需序列化表单的select元素即可。 不管他们有多少。 无需跟踪某些全局变量。

function runReport(reportIn) {
   var promptChain = $("select[name=prompt]").serialize();
   ....
}

这是一个jsFiddle

ils子

[英]Grails <g:set tag in javascript

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM