1

我有这两个 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 自己添加,但由于它们一直不止一个,我认为新脚本不会造成任何麻烦......

4

1 回答 1

2

检查您的选择器“.viewANfilters” - 如果不存在该类的元素,则 position() 将未定义,您的 JavaScript 失败并且 Wicket 将无法注册任何事件处理程序。

于 2018-04-10T17:05:49.367 回答