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