2017-08-08 70 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