これが私が持っているものです:
gridComplete: function() {
var doneButton = $('<input>', {
type: 'button',
value: 'Done',
click: function() {
alert("Done!");
}
});
console.log("HTML:", doneButton.html());
var ids = $(this).jqGrid('getDataIDs');
var self = this;
_.each(ids, function(id) {
$(self).jqGrid('setRowData', id, {
MarkDone: doneButton.html()
});
});
}
doneButton オブジェクトを挿入しようとすると、jqGrid セルは実際のボタンではなく [object Object] をレンダリングします。そのため、生の HTML を期待していると推測できます。ただし、doneButton.html() は空の文字列を返します...おそらく、doneButton オブジェクトをドキュメントにまだ追加していないためです。
jQueryでこれを行うためのトリックはありますか? HTMLマークアップを生成するためのよりクリーンで安全な構文を好むのですが、これを行うことができます:
gridComplete: function() {
var doneButtonHtml = "<input type='button' value='Done' onclick=\"alert('Done');\" />";
var ids = $(this).jqGrid('getDataIDs');
var self = this;
_.each(ids, function(id) {
$(self).jqGrid('setRowData', id, {
MarkDone: doneButtonHtml
});
});
},
ボタンを期待どおりにレンダリングします。