I have a grid that has a row click that opens the infoTemplate:
createAlertGrid: function(){ var alertColumns = [ { field: "FlagStatusDescription", label : "Status", formatter : function (value) { return value; }, get : function (obj) { if(obj.FlagStatusDescription === "Unavailable"){ return "<img src='images/unavailable.png' alt='unavailable image' style='width:18px;height:18px'/>"; }else if(obj.FlagStatusDescription === "Issue"){ return "<img src='images/issue.png' alt='issue image' style='width:18px;height:18px'/>"; } else { return "<img src='images/maintenance.png' alt='maintenance image' style='width:18px;height:18px'/>"; } return obj.FlagStatusDescription; } }, { field: 'alert', label: 'Description', renderCell: function(obj){ var template = '<div class="gridTitle gridInfo">Server Id: ${0}</div><div class="details gridInfo">${1}</div> <div class="details gridInfo">City: ${2}</div> <div class="details gridInfo">Status: ${3}</div>'; return domConstruct.create("div", { innerHTML: dojoString.substitute(template, [obj.Server_ServerName, obj.ServerTypeDescription, obj.EntityLocationCity, obj.FlagStatusDescription]) }); } }, { field: 'staff', label: 'Nearby Staff', formatter: function (value){ return value; }, get : function (obj){ return "<img src='images/pin_blue.png' alt='staff image' style='width:18px;height:18px'/>"; } } ]; app.alertGrid = new (declare([OnDemandGrid, Selection, Keyboard]))({ columns: alertColumns }, "alertGridDiv"); app.alertGrid.startup(); return app.alertGrid; }
Besides clicking on the row, I'd also like to have allow the user to click in the 'Nearby staff" column to execute a search when they click specifically in that cell'. I thought I could add an additional click event on dgrid-cell, but I must not have the right event.
app.alertGrid.on('.dgrid-cell.field-staff:click', function (evt){ console.log("you clicked the staff icon"); });
I've also tried
.dgrid-content .field-staff:click
.dgrid .field-staff:click
.dgrid-cell .field-staff:click
.dgrid-row .field-staff:click
.dgrid-row.field-staff:click
Can I not overlap events like this (both on the row and an individual cell) or do I just have the wrong element?
Solved! Go to Solution.
You should probably use CellSelection for this. or use the .dgrid-cell:click and with in the event identify which column the user has clicked and take approriate action.
grid.on(".dgrid-header .dgrid-cell:click", function(evt){ var cell = grid.cell(evt); // cell.element == the element with the dgrid-cell class // cell.column == the column definition object for the column the cell is within // cell.row == the same object obtained from grid.row(evt) });
You should probably use CellSelection for this. or use the .dgrid-cell:click and with in the event identify which column the user has clicked and take approriate action.
grid.on(".dgrid-header .dgrid-cell:click", function(evt){ var cell = grid.cell(evt); // cell.element == the element with the dgrid-cell class // cell.column == the column definition object for the column the cell is within // cell.row == the same object obtained from grid.row(evt) });
Expanding on the dGrid sample, I added a click event for the row. See what happens when you click on any cell in the row versus the ID cell
That should work with modification. I see no reason to have to click the header, but I can see with just a .dgrid-cell:click that I can check the field to see if it is = staff
on( app.alertGrid, ".dgrid-cell:click", function(evt){
var cell = app.alertGrid.cell(evt);
var col = cell.column;
if (col.field == 'staff'){
console.log("you clicked the staff cell");}
});
Shouldn't you just be able to wire the event for the field?
grid.on(".field-staff:click", function(){ console.log("you clicked the staff cell"); });
Yes, that did give me a result, but then I wasn't able to get row or cell information from it, it was like a generic mouse event. Maybe I didn't dig deep enough, but I wasn't seeing it.
You'd think you'd get something similar to dgrid-cell:click.
You could also use the information from the row click event. This will give you the information of the cell you clicked on if you examine the contents of evt.target.