我有这两个 DropDownChoice (DDC) 对象,它们工作得非常好:当从第一个 DDC 中选择一个元素时,第二个元素的列表会更新相关选择。第一个是strumListDDC,后者是controlListDDC。
controlListDDC.setOutputMarkupId(true);
controlListDDC.setChoiceRenderer(new ChoiceRenderer<>("name"));
controlListDDC.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
QCControl qcc = controlListDDC.getModelObject();
lotList = QCLot.getLotsForCtrl(qcc.getId());
if (!lotList.isEmpty()) {
target.add(lotListDDC);
}
}
});
searchForm.addOrReplace(new Label("strumListLabel", "Strumento:"));
searchForm.addOrReplace(strumListDDC = new DropDownChoice<>("strumList", InstalledStrum.loadAllStrum(false)));
strumListDDC.setDefaultModel(new Model<>());
strumListDDC.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
InstalledStrum is = strumListDDC.getModelObject();
controlList = QCControl.loadQCControlPerStrumType(is.getStrumType());
lotList = new ArrayList<>();
if (!controlList.isEmpty()) {
target.add(controlListDDC);
target.add(lotListDDC);
}
}
});
出于好的原因,我在页面模板中添加了一点点 Javascript,我的所有 HTML 页面都是从该模板派生而来的:
$(function filtersScroll() {
var $filters = $(".viewANfilters");
detailsPos = $filters.position().top;
$(window).on("scroll", function () {
if ($(window).scrollTop() > detailsPos)
$filters.css("position", "fixed").css("top", 0);
else
$filters.css("position", "fixed").css("top", detailsPos -$(window).scrollTop());
});
});
我通过使用 Wicket 添加了 javascript(但是如果我直接在 HTML 中插入代码,问题仍然存在,我只是为了完整性发布它):
response.render(JavaScriptContentHeaderItem.forScript(Costants.JS_FILTERS_SCROLL, "filters_scroll"));
当我添加 javascript 时,第一个 DDC 的 onUpdate 函数永远不会被调用(使用调试器检查)。一旦我删除了 javascript,自动更新行为就会再次开始正常工作。并不是说这个 javascript 是页面的基础,没有它我仍然可以继续,但我担心当我需要添加一些重要的 javascript 时,同样的事情会再次发生。
由于我对 javascript 很陌生,任何人都可以给我一个提示,告诉我是什么阻止了 AjaxFormComponentUpdatingBehavior 工作吗?可能是不同脚本标签之间的某种冲突吗?最后一页还有其他一些,由 Wicket 自己添加,但由于它们一直不止一个,我认为新脚本不会造成任何麻烦......