2013-06-17 4 views
0

У меня есть таблица jqGrid (которая преобразует таблицу в сетку) с флажками с несколькими выборами. Чтобы настроить стиль флажка, я использовал prettyCheckable, который генерирует метку и привязку (href) и контейнер div для ввода флажка (который скрыт и покрыт меткой и a). Моя проблема в том, что когда я проверяю, что метка не работает, вместо этого, когда я проверяю работу ввода.

Label checkedprettyCheckable на jqGrid не работает

Input checked

<div class="clearfix prettycheckbox labelright blue " id="aui_11140"> 
    <input role="checkbox" id="rs" class="cbx" type="checkbox" style="display: none;"> 
    <label for="rs" class="checked" id="aui_11139"> 
    </label> 
</div> 

установка prettyCheckable для входов:

$("input[type=checkbox]").change(function() { 
     $(this).triggerHandler("click"); 
    }).prettyCheckable(); 

И это мои настройки jqGrid:

$(document).ready(function() { 
    $('#searchForm').ajaxForm(function() { 
     var _data = $('#searchForm').serialize(); 
     $('#ResultsTable').jqGrid().setGridParam({url: '${searchUrl}' + _data}).trigger("reloadGrid") 
     return true; 
    }); 
    jsonTable('ResultsTable', 'ResultsPager', '${searchUrl}', 'searchForm', 
     {id: 'code'}, 
     ['Code', 'Description', 'CF'], 
     [{name: 'code', index: 'code', width: 55}, 
     {name: 'description', index: 'description', width: 90}, 
     {name: 'CF', index: 'CF', width: 80}, 
     function(id) { 
      var selRows = $(this).jqGrid('getGridParam', 'selarrrow'); 
      $('#edit').toggle(selRows.length == 1); 
      $('#delete').toggle(selRows.length > 0); 
      $('#editForm #code').val(selRows); 
      $('#deleteForm #code').val(selRows); 
     }, 
     function(aSel, selected) { 
      $('#edit').toggle(false); 
      $('#delete').toggle(selected); 
      if (selected) { 
       $('#editForm #code').val(selRows); 
       $('#deleteForm #code').val(selRows); 
      } 
     }, 
     true 
    )  
}); 

Почему это не работает?

пс. Я отредактировал prettyCheckable.js и удалил <a> поэтому не сгенерирован. И я переименовал css от .prettycheckbox a {} до .prettycheckbox label {}.

ответ

1

Плагин prettyCheckable использует код, подобный

input.prop('checked', true).change(); 

направить изменения состояния с флажком. С другой стороны jqGrid содержит click обработчик события только (см. the line).

Что вы можете сделать, это инициировать событие click в случае change события.

Например, у вас есть сетка с id="list". Затем id флажка для выбора всех элементов будет cb_list («cb_», добавленный с идентификатором сетки). Таким образом, вы используете, вероятно, код, как

$("#cb_list").prettyCheckable(); 

я предлагаю, чтобы вы изменили код на следующий

$("#cb_list").change(function() { 
    $(this).triggerHandler("click"); 
}).prettyCheckable(); 

Это должно исправить вашу проблему.

+0

Большое вам спасибо! теперь он отлично работает! но есть еще одна проблема, которую я не объяснил. Стиль флажка изменяется только для первого ввода. –

+1

@Fuiba: Добро пожаловать! Извините, но я не понимаю, что вы подразумеваете под «первым вводом» и который вы имеете в виду. Не могли бы вы описать свою проблему более ясными? Вы не включаете код, который вы используете для 'prettyCheckable'. Какие чехбоксы вы меняете? В вашем скриншоте содержится только chechbox в заголовке столбца столбца multiselect. У вас проблемы с флажком или с другим? – Oleg

+0

Простите, если я не объясню хорошо. В приведенном выше изображении вы можете увидеть классический флажок и настраиваемый флажок. Из Firebug я удалил стиль «display: none» на вход, и я сделал скриншот, чтобы показать его вам (чтобы увидеть вход и метку). Это скриншот без изменений с Firebug http://imageshack.us/a/img600/2686/s8v.jpg. Почему первый флажок имеет стиль изображения, а все остальные флажки имеют стиль по умолчанию, хотя я использовал общий класс для всех флажков?(Я отредактировал мой вопрос, добавив код jQuery) –

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