在一个应用程序中,我有一个重复控件,对于重复中的每个条目,我都有一个相应的引导对话框模态。
当用户使用提供的网址(包括哈希值)打开xpage时,我想打开某个模式。哈希值对应于模式的ID,例如#view:_id1:_id152:objRepeatList:1:_id193:_id200:bootstrapModal
但是我注意到命令$('#view:_id1:_id152:objRepeatList:1:_id193:_id200:bootstrapModal')。modal('show'); 没有提供任何结果。
为了测试show()函数,我制作了一个简单的测试脚本,该脚本获取DOM中的第一个模式组件并尝试将其打开:
$( document ).ready(function() {
var cardType= '#{javascript:SSApp.getCurrentObjectCollectionCardType()}';
if (cardType=="cardPicture"){
var modals = $(".modal");
alert(modals.length);
if (modals.length > 0){
var firstModal = modals.first();
alert("we got one");
var firstModalId = "#" + firstModal.attr('id');
alert( firstModal.attr('id') );
$(firstModalId).modal('show');
}
}
});
我收到所有警报,但最后一个命令行始终给出零结果。
因为xpage可以部分刷新,所以我也尝试了用于更新页面的eventHandler的onComplete事件,但是似乎要进行大量缓存,然后四处走动,有时cardType会以某种方式存储在内存中:
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="row-body">
<xp:this.action>
<![CDATA[#{javascript:sessionScope.put("collDisplay","cards");
SSApp.currentObject.loadRelations(relation.category);}]]>
</xp:this.action>
<xp:this.onComplete><![CDATA[var cardType= '#{javascript:SSApp.getCurrentObjectCollectionCardType()}';
if (cardType=="cardPicture"){
var modals = $(".modal");
alert(modals.length);
if (modals.length > 0){
var firstModal = modals.first();
alert("we got one");
var firstModalId = "#" + firstModal.attr('id');
alert( firstModal.attr('id') );
$(firstModalId).modal('show');
}
}]]></xp:this.onComplete>
</xp:eventHandler>
有人知道我该怎么做吗?
问题是jQuery由于id中的“:”而找不到对话框。他们必须逃脱。当您需要检索XPages ID时,可以使用以下一个小功能代替$(该字符归Mark Roden所有)。
function x$(id){
id = id.replace(/:/gi, "\\:");
return ($("#" + id));
}
当需要XPages项时,请使用此函数代替$()。
x$("view:_id1:_id152:objRepeatList:1:_id193:_id200:bootstrapModal").modal('show');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句