2017-08-08 95 views
0

我正在使用bootstrap multiselect根据文本框中的搜索更新/显示某些用户,即根据我的应用程序要求,从文本中选择的结果将以多选形式显示。取消选择选项将从多重选择和重建中删除该值。我使用检票框架显示这些多选如下 -无法使用jQuery长度查找现有元素

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为0。我删除选项后立即重建多选,并且由于上述问题,我得到两个多选(长度返回0,并且检票创建多选选项)

任何与我的代码或任何其他方式来识别UL礼物的问题基于id使用jQuery?

回答

1

你打电话给setOutputMarkupId(true);吗?

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

+0

我不调用'setOutputMarkupId(true)'。 在添加新报告时,通过ajax添加组件,同时进行编辑/复制,组件在页面加载时存在。是的,我正在考虑将JS代码从renderHead移动到AjaxFormComponentUpdatingBehavior。稍后更新。 – ChilBud