Wicket AjaxFormUpdatingBehavior 和 Javascript

Wicket AjaxFormUpdatingBehavior and Javascript

我有这两个 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 中,问题仍然存在,为了完整性,我只是 post):

 response.render(JavaScriptContentHeaderItem.forScript(Costants.JS_FILTERS_SCROLL, "filters_scroll"));

当我添加 javascript 时,第一个 DDC 的 onUpdate 函数永远不会被调用(使用调试器检查)。一旦我删除 javascript,自动更新行为就会再次正常工作。并不是说这个 javascript 是页面的基础,没有它我仍然可以继续,但我担心当我需要添加一些严重的 javascript.

时,同样的事情会再次发生

由于我是 javascript 的新手,任何人都可以提示我阻止 AjaxFormComponentUpdatingBehavior 工作的原因吗?不同脚本标签之间是否存在某种冲突?最后一页还有其他的,由 Wicket 自己添加,但由于它们一直不止一个,我认为新脚本不会造成任何麻烦...

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