Tout d'abord - regardez dans les frameworks Javascript. Le type de fonctionnalité dont vous parlez est suffisamment avancé pour que, si vous voulez vraiment que votre code fonctionne correctement dans tous les navigateurs, vous ne devriez pas le faire vous-même. Il vous permet également de garder votre HTML libre de JavaScript inline laid et ce qui est considéré comme une mauvaise pratique.Cela étant dit, voici une pensée:
Avez-vous envisagé d'avoir deux lignes par élément, un de la ligne dans "modifier" mode "et l'un de la ligne en" mode normal "? Vous pouvez personnaliser les lignes "mode édition" pour qu'elles soient masquées par défaut, et lorsqu'un internaute clique sur le lien d'édition, vous pouvez masquer cette ligne et afficher celle d'édition. Ce serait vraiment plus facile que de faire un appel AJAX pour obtenir le formulaire d'édition.
EDIT
Here's some code to get you started:
function editRow(row_id, callback) {
// you would get this dynamically through ajax, thus why we need the callback
var html = '<tr id="edit_' + row_id + '" class="edit"><td><input type="text" name="td_1" value="Text 1"></td><td><input type="text" name="td_2" value="Text 2"></td><td><input type="submit" name="submit" value="submit"></td></tr>';
callback(html);
}
$('a.edit', '#data').click(function() {
var $tr = $(this).closest('tr');
var id = $tr.attr('id').split('_').pop();
var edit_row = '#edit_' + id;
if($(edit_row).length == 1) { // edit row already exists
$tr.hide();
$(edit_row).show();
} else { // doesn't exist, fetch it
editRow(id, function(html) {
$tr.hide();
$tr.after(html);
});
}
return false;
});
$(window).click(function(e) {
$('tr.edit:visible').each(function() {
var $tr = $(e.target).closest('tr');
var id = $(this).attr('id').split('_').pop();
console.log(e.target, $tr, this);
if($tr.attr('id') != this.id) {
$(this).hide();
$('#row_' + id).show();
}
});
});
Je constate probablement qu'il ya beaucoup de plugins jQuery qui font beaucoup de cela pour vous, et en fonction des besoins de votre application peut-être mieux d'aller chercher la rangée à chaque fois, de ne pas les chercher du tout, etc. C'est juste une idée approximative de ce que vous pourriez avoir à faire pour réaliser ce que vous voulez, et le reste dépend de vous. :)
utilisez-vous jQuery? Je vois que vous avez un appel $() comme exemple mais aucune mention d'un framework et pas de balise jquery ... –
Oui, c'est Jquery. – TigerTiger
édité ma réponse avec un code qui pourrait vous aider, alors. –