2016-06-10 3 views
0

У меня есть таблица данных, в которой я добавил панель, в которую помещается флажок в ячейке. У меня есть еще одна панель, которая имеет флажок, который я использую, чтобы выбрать все флажки в таблице данных. «Выбрать все» выполняется JQuery, а JQuery - в коде ниже. Как я могу получить событие onclick или onchange, которое будет вызываться, когда установлен флажок JQuery Select All? Я попытался использовать AjaxCheckBox ниже, но событие не вызывается.Калитка checkbox onUpdate не вызывается при изменении состояния проверки JQuery

private static List<CheckBox> checkBoxes = new ArrayList<CheckBox>(); 
    private static class ActionsPanel extends Panel { 

    public ActionsPanel(String id, IModel<WorkOrderCustomer> model, final String uuid) { 
     super(id); 

     AjaxCheckBox checkBox = new AjaxCheckBox("checkbox", Model.of(Boolean.FALSE)) { 
      private static final long serialVersionUID = 1L; 

      @Override 
      protected void onComponentTag(ComponentTag tag) { 
       super.onComponentTag(tag); 
       tag.append("class", uuid, " "); 
      } 

      @Override 
      protected void onUpdate(AjaxRequestTarget target) { 
       if(getModelObject() == true) { 
        checkBoxes.add(this); 
       } else { 
        checkBoxes.remove(this); 
       } 
      } 
     }; 
     add(checkBox); 
    } 
} 
    private static class ActivityPanel extends Panel { 

    private final String selectCheckboxJS = "if($(this).attr('checked') == 'checked') {var val=true;} else {var val=false;}$('." + 
           uuid + "').each(function() { $(this).attr('checked', val); });" 
    private static final long serialVersionUID = 1L; 
    @Inject 
    private Dao dao; 
    private DropDownChoice<String> activities; 

    public ActivityPanel(String id, final String selectCheckboxJS, FilterForm form) { 
     addActivitySwitchPanel(selectCheckboxJS, form); 
    } 

    private void addActivitySwitchPanel(final String selectCheckboxJS, FilterForm form) { 

     CheckBox checkAll = new CheckBox("checkAll"); 
     checkAll.add(new ChangeActivitySearchBehavior() { 
      @Override 
      public void onComponentTag(Component component, ComponentTag tag) { 
       tag.put("onclick", selectCheckboxJS); 
      } 
     }); 

     SubmitLink changeActivityLink = new SubmitLink("activityLink", form); 
     add(checkAll); 
     add(changeActivityLink); 
    } 
} 

ответ

1

Вместо того, чтобы просто изменить значение атрибута checked вы могли $(this).trigger('click') флажки.

Также обратите внимание на компонент org.apache.wicket.markup.html.form.CheckGroupSelector.

+0

Спасибо за это. Я был настолько обманут, думая, что мне придется решать это через калитки, что я даже не думал о попытке jQuery. Я смотрел на GroupSelector, когда я изначально его разрабатывал, но из-за того, как мы структурировали класс, у меня не было прямой обработки этих флажков, не пропуская какой-то фанки-редизайн. – Chris

Смежные вопросы