J'ai un jqGrid
dans mon projet et je voudrais ajouter des boutons personnalisés, mais aucun bouton n'apparaît dans la grille et autant que je vois il n'y a pas de problème de syntaxe. J'ai essayé de simplifier ma grille, mais le bouton n'apparaissait toujours pas. J'utilise le moteur de template Velocity
, c'est pourquoi j'ai le symbole $
dans mon code, qui ne fait pas référence à jQuery. J'utilise jqGrid 3.8.2.jqGrid navButtonAjouter ne fonctionne pas
Voici comment je construis la grille:
<script type="text/javascript">
function loadCompleteHandler(){
jQuery("#listTable").jqGrid('setGridHeight', Math.min(500,parseInt(jQuery(".ui-jqgrid-btable").css('height'))));
}
function select1() {
return ": ;false:no;true:yes";
}
function select2(){
return ": ; 1:Select1;2:Select2;3:Select3";
}
var colModelData = [
{name:'1', index:'1',width:'5%', hidden: true, align:'center', sortable: false, resizable:false},
{name:'2', index:'2',width:'10%', align:'center', formatter: 'checkbox', sortable: false, editable: true, stype: 'select', edittype: 'checkbox', editoptions: {value: "Yes:No"}, searchoptions: { value: select1()}, resizable:false},
{name:'3', index:'3', width:'35%', sortable: false, resizable:false, defaultValue: ''},
{name:'4', index:'4', width:'30%', sortable: false, resizable:false, defaultValue: ''},
{name:'5', index:'5', width:'20%', sortable: false, defaultValue: '$selectedValue', stype: 'select', searchoptions: {value: select2()}, resizable:false},
]
jQuery(function(){
jQuery("#listTable").jqGrid({
url: '$urlManager.getURL("/myPath/My.json")' + '?param1=param1Value¶m2=param2Value',
datatype: 'json',
postData: {
filters: '{"groupOp":"AND","rules":' +
'[{"field":"field3","op":"eq","data":"$selectedValue"}]}'
},
mtype: 'POST',
colNames:['', '<input type="checkbox" id="selectionCheckbox" onclick="checkboxClick(this)">', 'column3', 'column4', 'column5'],
colModel : colModelData,
width:'768',
height: 500,
pager: '#pagerDiv',
gridview: true,
rowNum: 50,
rowTotal: 500,
sortorder: 'desc',
onSelectRow: function(id){
if (id){
if (id !== lastSel) {
jQuery('#listTable').restoreRow(lastSel);
jQuery('#listTable').editRow(id, true);
lastSel=id;
} else {
jQuery('#listTable').editRow(id, true);
}
}
},
editurl: '$urlManager.getURL("myPath/MyScreen.vm")',
caption: 'Caption',
hidegrid: false,
viewrecords: true,
loadComplete: loadCompleteHandler,
ignoreCase: true,
search: true,
page: $page
});
jQuery(function(){
jQuery("#listTable").jqGrid('filterToolbar',{
stringResult: true,
searchOnEnter: false });
});
jQuery("#listTable").jqGrid('navGrid',"#pagerDiv",{edit:false,add:false,del:false})
.jqGrid('navButtonAdd', '#pagerDiv', {caption: "Edit",
onClickButton:function(){
console.log('Button clicked');
}});
<script type="text/javascript">
<table id = "listTable"> </table>
<div id = "pagerDiv"></div>
Merci à l'avance.
Merci Oleg. Vous avez raison sur les erreurs de syntaxe, j'ai fait quelques erreurs quand j'ai copié et réécrit le code. L'erreur principale était le manquant '}); comme vous l'avez mentionné. Merci encore! – Atticus
@Atticus: Vous êtes les bienvenus! Je vous recommande d'utiliser [JSLint] (http://www.jslint.com/). Si vous coupez et collez le code JavaScript de ma démo dans JSLint, vous n'aurez aucune erreur. Si vous n'aimez pas les restrictions utilisées par JSLint, vous pouvez ajouter plusieurs options dans le commentaire au début du code JavaScript. JSLint peut améliorer la qualité de votre code. Beaucoup d'autres développeurs (comme les développeurs de jQuery) utilisent JSLint en permanence. – Oleg
J'ai encore une question si vous suivez toujours ce fil. Pourquoi est-il important d'inclure chaque définition de jqGrid dans un 'jQuery (function() {});'? Je vois que la solution précédente fonctionnerait si je l'incluais dans un 'jQuery (function() {}) séparé'. – Atticus