Die Verknüpfung aus einer Spalte mit dem Wert im jqGrid auf eine neue Seite mit GET
Habe ich eine jqGrid enthält einige Felder wie:
job_id, name, etc
Was ich versuche zu tun ist, so dass, wenn Sie auf den Wert in der Spalte job_id, es wird redirect Sie zu:
job.php?job_id=(Wert, den Sie geklickt haben)
Ich begann, indem Sie versuchen, verwenden Sie die folgende als meine colModel:
{ name:'job_id', index:'job_id', edittype:'select', formatter:'showlink',
formatoptions:{baseLinkUrl:'job.php'}, width:50, align:'center' }
Aber was sich so ergibt, ist eine Umleitung zu:
job.php?job_id=(row_id)
Ich habe einige suchen, und fand ein post von dem Entwickler des open-source-version dieser software, der vorschlug, mit den folgenden colModel und zusätzliche JS:
{ name:'job_id', index:'job_id', edittype:'select', formatter:'showlink',
formatoptions:{baseLinkUrl:'#'}, width:50, align:'center' }
loadComplete: function() {
var myGrid = $("#home_list");
var ids = myGrid.getDataIDs();
for (var i = 0, idCount = ids.length; i < idCount; i++) {
$("#"+ids[i]+" a",myGrid[0]).click(function(e) {
var hash=e.currentTarget.hash;//string like "#?id=0"
if (hash.substring(0,5) === '#?id=') {
var id = hash.substring(5,hash.length);
var text = this.textContent;
location.href="job.php?id="+text;
}
e.preventDefault();
});
}
}
Dies ist aber nicht kompatibel mit IE. Zusätzlich zu dieser, wenn die Anzeige eine große Anzahl von Zeilen in das jqGrid, dauert es extrem lange zum laden, sagen wir 5 Sekunden + für 500 Zeilen.
Ich werde weiter daran zu arbeiten, aber ist das etwas, was jemand anderes getan hat?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen verwendete code-Beispiel aus meine alte Antwort, so dass ich entscheiden, ich sollte die Antwort auf deine Frage.
Stimme ich mit der Kritik über die Leistung der code der
loadComplete
. Also +1 von mir für deine Frage. Das Konstrukt$("#"+ids[i]+" a", myGrid[0])
im inneren der langen Schleife arbeiten kann, sehr langsam. Man kann leicht das problem zu beheben wenn man so will, verwenden Sie die folgendeKönnen Sie sehen, dass die verbesserte version die demo funktioniert genau wie die original demo. Zeigen die Leistungsfähigkeit der Methode auf 1000 Zeilen, die ich erstellt eine weitere demo. Man kann sehen, dass die neue Methode funktioniert schnell.
Nun zurück zu deinem Hauptproblem. Die beste Leistung, die wir erhalten, wenn Sie schreiben, Ihre custom formatter und unformatter anstelle der Verwendung der vordefinierten formatter showlink. Der code kann etwa folgende:
Der exakte code hängt davon ab, welche
datatype
Sie verwenden, ob Sieloadonce:true
oder nicht, und diejsonReader
Sie verwenden. Es kann beispielsweise sein, dassrowObject
ist array in Ihrem Fall und Sie haben zu verwendenarray-index den entsprechenden Daten-Bereich (wie
rowObject[4]
) stattrowObject.job_id
.AKTUALISIERT: ich denke, die beste Art und Weise der Umsetzung wird die Verwendung von onCellSelect oder beforeSelectRow anstelle der Bindung click-Ereignis für jedes element in der Spalte. Ich empfehle, Lesen Sie die folgenden Antworten für details: diese eine, ein weiteres und eine weitere alte Antwort.
clicked the row with id='1'. Link contain 'undefined'
var text = this.textContent || this.innerText;
stattvar text = this.textContent;
odervar text = this.innerText;
. Wenn version nicht funktioniert bitte genau sagen welche Versionen der Browser, die Sie verwenden. Bei mir funktioniert es im IE8, FF 3.6.13 und Chrome 9.var text = this.textContent || this.innerText;
. Aber ich Geb dir das snippet ausprobieren und hier wieder melden. Vielen Dank.this.innerText
oderthis.textContent
zuthis.textContent || this.innerText
. Bitte lassen Sie mich bekannt, die Ihren code basierend auf meinem Beispiel korrekt funktioniert nachdem Sie diese änderungen.rowObject.job_id=+
sollte nicht ein Gleichheitszeichen vor dem plus-Zeichen, auchcellval
sollte geändert werden, umcellvalue
und für die Konsistenz, die Sie verwenden solltenrowObject
in beiden formatter und unformatter. Vielleicht könnten Sie ändern die oberen Beispiel? Danke!