无法使用jQuery长度找出现有元素

时间:2017-08-08 21:08:50

标签: javascript jquery wicket

我正在使用bootstrap multiselect根据文本框中的搜索更新/显示某些用户,即根据我的应用程序要求,从文本中选择的结果将以多选显示。取消选择一个选项将从多选和重建中删除该值。我正在使用wicket框架来显示这个多选,如下所示 -

private PaletteListChoice<T> addSelectedEntities(...) {
    final PaletteListChoice<T> result = new PaletteListChoice<T>(id, model, choicesModel, renderer, this) {
        private static final long serialVersionUID = 1L;

        @Override
        public void renderHead(IHeaderResponse response)
        {
            String jsSelectedField = "var idSelector = '" + getMarkupId() + "';\n"
                    + "var idSelectorUL = jQuery('#' + idSelector +'UL');\n"
                    + "if(idSelectorUL.length) {\n" // if idSelectorUL present, don't create bootstrap-multiselect again
                    + "} else {\n" // if idSelectorUL not present, then create bootstrap-multiselect again
                    + "MultiSelect.setMultiSelect(idSelector, false);\n" // custom code to display bootstrap multiselect, similar to $('#id').multiselect();
                    + "}\n";

            response.renderOnDomReadyJavaScript(jsSelectedField);
        }
    };
    parent.add(result);
    return result;
}

现在,我的问题是虽然存在idSelectorUL(例如selectddUL),但我将 idSelectorUL.length作为&#39; 0&#39; 。一旦选项被删除,我正在重建多选项,并且由于上述问题,我得到两个多选项(长度返回0并且wicket创建多选项选项)

我的代码或使用jQuery基于id识别UL存在的任何其他方式的任何问题?

1 个答案:

答案 0 :(得分:1)

您是否在组件上调用了setOutputMarkupId(true);

加载时页面上是否存在该组件,或者该组件是否通过ajax添加?如果是这样,您应该将您的javascript从renderHead移动到附加到组件本身的Behavior。