2013-06-17 3 views
0

J'ai une table jqGrid (qui convertit une table en grille) avec des cases à cocher à sélection multiple. Pour personnaliser le style de case à cocher j'ai utilisé prettyCheckable, qui génère une étiquette et un ancre (href) et un conteneur div pour l'entrée de case à cocher (qui est caché et couvert par l'étiquette et a). Mon problème est que quand je vérifie l'étiquette ne fonctionne pas, à la place quand je vérifie l'entrée fonctionne.

Label checkedprettyCheckable sur jqGrid ne fonctionne pas

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> 

réglage prettyCheckable pour les entrées:

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

Et voici mes paramètres 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 
    )  
}); 

Pourquoi cela ne fonctionne pas?

ps. j'ai édité le prettyCheckable.js et enlevé le <a> n'est donc pas généré. Et j'ai renommé le CSS de .prettycheckbox a {} à .prettycheckbox label {}.

Répondre

1

Le plugin utilise prettyCheckable code comme

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

de transmettre les modifications de l'état de la case à cocher. De l'autre côté, jqGrid contient uniquement le handle d'événement click (voir the line).

Ce que vous pouvez faire est de déclencher l'événement click en cas d'événement change. Par exemple, laissez-nous avoir une grille avec id="list"

Puis le id de la case à cocher pour sélectionner tous les éléments sera cb_list ("cb_" ajouté avec l'ID de grille). Donc, vous utilisez probablement le code comme

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

Je suggère que vous modifiez le code à la suivante

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

Il devrait résoudre votre problème.

+0

Merci beaucoup! maintenant ça marche bien! mais il y a un autre problème que je n'ai pas expliqué. Changement de style de case à cocher uniquement pour la première entrée. –

+1

@Fuiba: Vous êtes les bienvenus! Désolé, mais je ne comprends pas ce que vous voulez dire sous "la première entrée" et quel style de case à cocher vous voulez dire. Pourriez-vous décrire votre problème plus clairement? Vous n'avez pas inclus le code que vous utilisez pour 'prettyCheckable'. Quelles chechboxs vous changez? Votre shorthort contient uniquement la chechbox dans l'en-tête de colonne de la colonne multi-sélection. Avez-vous un problème avec la case à cocher ou avec une autre case? – Oleg

+0

Je suis désolé si je n'ai pas bien expliqué. Dans l'image ci-dessus, vous pouvez voir la case à cocher classique et la case à cocher personnalisée. De Firebug j'ai enlevé le style 'display: none' à l'entrée et j'ai fait la capture d'écran pour vous le montrer (pour voir l'entrée et l'étiquette). Ceci est la capture d'écran sans modifications de Firebug http://imageshack.us/a/img600/2686/s8v.jpg. Pourquoi la première case à cocher a le style d'image et toutes les autres cases ont un style par défaut même si j'ai utilisé une classe générale pour toutes les cases à cocher?(J'ai édité ma question en ajoutant le code jQuery) –

Questions connexes