2017-10-14 3 views
0

Quelqu'un a posté ceci:
Making row editable when hit row edit buttonSupprimer la ligne, Enregistrer les modifications une fois que je modifier table en utilisant Javascript

Je voulais créer un supprimer/modifier/bouton de sauvegarde afin que personne ne peut entrer dans le numéro de commande et supprimer ou modifier les données .

étapes de séquençage: sur Supprimer: I cliquez sur Supprimer bouton, la boîte rapide arrive, j'entre , il supprime . Je clique sur le bouton de suppression, la boîte de dialogue apparaît, j'entre , il ne supprime pas .

Cependant: je clique sur le bouton supprimer, la boîte rapide vient, j'entrer , il supprime . Je clique sur le bouton de suppression, la boîte de dialogue s'affiche, j'entre 1, elle ne supprime pas .

Modifier bouton fonctionne, mais quand je clique sur le bouton Enregistrer, il ne sera pas enregistrer les modifications

https://jsfiddle.net/nhgjdr00/8/

HTML:

<table id="myTable" border="1"> 
<thead> 
<th>Order #</th> 
<th>Name</th> 
<th>Tea Order</th> 
<th>Tea Size</th> 
</thead> 

<tbody> 
<tr> 
<td class="rowNumber">1</td> 
<td>Shakespeare</td> 
<td>Iced</td> 
<td>Small</td> 
</tr> 
<tr> 
<td class="rowNumber">2</td> 
<td>Frost</td> 
<td>Hot</td> 
<td>Medium</td> 
</tr> 
</tbody> 
</table> 
<br> 
<input id="deleteRowBtn" type="button" value="Delete Row" /> 
<input id="editBtn" type="button" value="edt" /> 
<input id="saveBtn" type="button" value="saveChange" /> 
<br> 
<br> 
<form name="create"2 style="width:80px;"> 
Name:<input type="text" id="txtname" /> 
<br> 
Tea Order:<input type="text" id="txtTeaOrder" name="txtTeaOrder" /> 
<br> 
Tea Size<input type="text" id="txtTeaSize" name="txtTeaSize" /> 
<br> 
</form> 
</body> 

JS:

"use strict"; 
var orderNumberHolder=[]; // holds each order number 

// returns a html element (id) 
var $ = function(id) { 
return document.getElementById(id); 
}; 

function deleteRow() { 
var orderNumber = parseInt(prompt ("enter order number to delete")); 
if (orderNumber == NaN || orderNumber < 1) { 
prompt ("enter order number"); 
} else { 
var table = $("myTable"); 
var rowCount = table.rows.length; // eliminate header so minus 1 
for(var i=0, j=0; i<rowCount; i++, j++) { 
var row = table.rows[i]; 
if (orderNumber == i) { 
table.deleteRow(i); 
rowCount--; 
table.rows[j].cells[0].innerHTML = j; // renumbers the list after delete row 
} 
} 
} 
} 

function edt() { 
// converts number into integer 
var orderNumber = parseInt(prompt ("enter order number to edit")); 

// need to store order number so I can reference when I save edit info 
orderNumberHolder.push(orderNumber); 
if (orderNumber == NaN || orderNumber < 1) { 
prompt ("enter order number"); 
} else { 
var table = $("myTable"); 
var rowCount = table.rows.length; 

// i is index, so start with 1 so it doesn't include header 
for(var i=1; i<rowCount; i++) { 
var row = table.rows[i]; 
if (orderNumber == i){ 
$("txtname").value = table.rows[i].cells["1"].innerHTML; 
$("txtTeaOrder").value = table.rows[i].cells["2"].innerHTML; 
$("txtTeaSize").value = table.rows[i].cells["3"].innerHTML; 
} 
} 
} 
} 

function saveChange() { 
var table = $("myTable"); 
var rowCount = table.rows.length; // do not want to include header 

for(var i=1; i<rowCount; i++) { 
var row = table.rows[i]; 
if (orderNumberHolder[i] == i){ 
table.rows[i].cells["1"].innerHTML = $("txtname").value ; 
table.rows[i].cells["2"].innerHTML = $("txtauthor").value; 
table.rows[i].cells["3"].innerHTML = $("txtcdate").value; 
$("txtname").value = ''; 
$("txtauthor").value = '';      
$("txtcdate").value = '' ; 
rowCount--; 
} 
} 
} 

window.onload = function() { 
$("deleteRowBtn").onclick = deleteRow; // calls function 
$("editBtn").onclick = edt; // calls function 
$("saveBtn").onclick = saveChange; // calls function 
} 

J'apprécierais tout su ggestions.

Répondre

0

Vous prenez le numéro de ligne et supprimez cette ligne. Lorsque vous supprimez la première ligne, le numéro de la ligne de l'élément existant (par exemple, n ° 2) passe de 1 à 2. Par conséquent, lorsque vous entrez 2 dans l'invite, il n'y a pas de ligne à supprimer.

+0

Merci Vipin. J'ai réédité mon code et mis à jour mon jsfiddle. J'ai ajouté une fonction renumérotée. Cependant, je n'arrive pas à renuméroter le numéro de commande. Si je supprime l'ordre 1, il ne renumérotera pas 2 en 1. J'ai trouvé des exemples jQuery sur la façon de renuméroter. Cependant, je ne suis pas familier avec jQuery, et j'essaie de le faire via Javascript. J'apprécierais toutes les suggestions de la galerie d'arachide. –

+0

J'ai compris comment obtenir le bouton de suppression et renuméroter la liste après avoir supprimé la ligne. La seule chose qui reste est le bouton de sauvegarde ne fonctionne pas. J'apprécierais toutes suggestions. J'ai mis à jour les changements ci-dessus et jsfiddle. –

+0

J'ai remarqué même si cela fonctionne, je reçois cette erreur: TypeError Uncaught: ne peut pas lire la propriété 'cells' de undefined à HTMLInputElement.deleteRow –