Comment passer des données à l'url de jqgrid ligne si hypertexte est cliqué
jqGrid contient de la colonne quantité et bouton ajouter au panier à l'aide de colmodel ci-dessous. D'édition en ligne
est utilisé pour remplir la quantité.
Si la quantité est champ et ajouter au panier le lien sur l'autre colonne est cliqué, entré quanty n'est pas passé à AddToCart contrôleur. Id de produit à partir de l'id de champ dans les données json est transmis correctement.
Comment passer quantité sélectionnée à AddToCart contrôleur (à l'aide de invoqué chaîne de requête d'url ou autre chose) ?
colmodel est:
{"label":"AddToCart",
"name":"Addtocrt_addtocrt",
"formatter":"showlink",
"formatoptions": {"baseLinkUrl":"http://MySite.com/Store/AddToCart"}
},
{"label":"Quantity",
"name":"Stocks_valkogus",
"editoptions":{"maxlength":10 }
"editable":true
}
Mise à jour
De données à partir du serveur est au format json et de la ligne de montage mode est utilisé.
rowData.Stocks_valkogus
renvoie undefined.
J'ai essayé le code ci-dessous. boîte d'alerte montre que quantityVal est pas défini.
Comment faire pour récupérer des entrées de la quantité?
{"name":"Addtocrt_addtocrt",
"formatter":"dynamicLink",
"formatoptions":{"onClick":addToCartOnClick
}}
function addToCartOnClick(rowId, iRow, iCol, cellValue, e) {
var iCol = getColumnIndexByName($grid, 'Stocks_valkogus') ,
quantityVal = $('#' + $.jgrid.jqID(rowId) + '>td:nth-child(' + (iCol + 1) + '>input').val();
alert(iCol); //returns 3
alert(quantityVal); //returns undefined.
window.location = 'Store/Details?' + $.param({
id: rowId,
quantity: quantityVal
});
}
OriginalL'auteur Andrus | 2012-01-27
Vous devez vous connecter pour publier un commentaire.
Je comprends le problème de très bonne qualité. Je suis d'accord que les deux prédéfinis formateur que l'on peut utiliser actuellement ('showlink' et 'link' formateurs) ne sont pas assez flexibles.
Je peux vous suggérer un autre formateur qui vous pourriez télécharger ici. L'usage du formateur est très facile:
La
url
défini comme fonction sera utilisée dans le<a>
que la valeur dehref
attribut.En outre à la
url
formatoptions
le 'dynamic-link' formateur prend en chargetarget
option (avec la même signification que par 'showlink'),cellValue
qui peut aussi être fonction etonClick
rappel avecrowId
,iRow
,iCol
,cellValue
,e
en tant que paramètres. Si leonClick
de rappel est définie la valeur deurl
sera ignoré. On peut donc ignorer la définition du formateur optionurl
.La démo de montrer l'utilisation de la "dynamic-link' formateur:
L'actuel code de la
formatter: 'dynamicLink'
vous pouvez trouver ci-dessous:J'ai l'intention de placer le code du formateur et quelques autres plugins pour jqGrid sur le github.
Mise à JOUR: Gratuit jqGrid étend les options de
formatter: "showlink"
(voir l'article de wiki et la réponse). Donc, on n'a pas besoin d'utiliser leformatter: "dynamicLink"
dans le cas de l'utilisation de la libre jqGrid.Vous utilisez formateur ici dans un mauvais sens. Il me semble que vous voulez utiliser le lien comme le remplacement du bouton "Enregistrer" de la modification en ligne. Dans votre cas, je vous recommande de l'utiliser juste
onClick
partie de formateur. Sur leonClick
de rappel vous pouvez appelersaveRow
pour être sûr que les valeurs de l'édition en cours des lignes sont enregistrées. Vous pouvez en outre effectué, les autres appels du serveur si vous avez besoin de le faire de plus à la ligne d'économie.Désolé, mais je persiste à ne pas comprendre ce que vous faites et pourquoi l'économie n'est pas le travail. En quelque sorte à l'intérieur de
onClick
vous connaissez le rowid. Ainsi, vous pouvez faire le plein d'analyser de la ligne. Vous pouvez facilement récupérer les données de n'importe quel<input>
trop de contrôle avec environ$('#' + $.jgrid.jqID(rowid) + '>td:nth-child(' + (iCol + 1) + '>input').val()
oùiCol
devrait être l'indice de la colonne quantité.Je ne comprends toujours pas pourquoi yo utilisation d'édition en ligne si vous ne mettez pas en œuvre salvifique de la ligne. En outre, le
Store/Details?...
semble être de la pure HTTP get qui va être mis en cache sur le côté client et peut être que le serveur ne sera pas appelé à la deuxième fois. Vous avez de la place de revalider la mise en cache dans les en-têtes HTTP de laStore/Details
réponse. L'actuel code deaddToCartOnClick
n'est pas bon car il ne fonctionnera pas si vous cliquez sur le lien dans la ligne qui n'est pas dans l'édition. Dans le code, je vois que vous devriez utiliser')>input'
au lieu de'>input'
.la valeur par défaut de
url
est '#'. Donc, si vous venez de sauterurl
définition ou l'utilisationurl: '#'
laonClick
sera appelée. Si vous utilisezvar $quantity = $('#' + $.jgrid.jqID(rowid) + '>td:nth-child(' + (iCol + 1) + ')')
pour obtenir<td>
de la "Quantité" d'appel. Si$quantity.find('>input').length === 0
la cellule n'est pas en mode d'édition et les deuxrowData.Stocks_valkogus
et$quantity.text()
obtenir de la valeur. si$quantity.find('>input').length === 1
la cellule est en mode d'édition et vous pouvez obtenir la valeur à l'égard de$quantity.find('>input').val()
. Il devrait fonctionner.OriginalL'auteur Oleg