0

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ステートメントがあることですが、それらの数は可変です。エンドユーザーが選択したレポートに応じて、存在しない場合もあれば、存在する場合もあります。

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

1 に答える 1

1

jQueryを使用しているので、フォームのselect要素をシリアル化するだけです。いくつでも構いません。一部のグローバル変数を追跡する必要はありません。

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

これがjsFiddleです

于 2013-02-06T22:25:10.080 に答える