Hola,
 
Estoy probando este ejemplo, que he visto en Internet para editar filas de una tabla:
http://mrbool.com/how-to-add-edit-and-delete-rows-of-a-html-table-with-jquery/26721
 
Lo he adaptado en base a mis necesidades, el problema es que tanto cuando doy a nuevo o a modificar, quiero validar que los campos no estén vacíos. En nuevo, al pulsar guardar, me funciona OK, pero al editar y dar a guardar, el alert de validación de campos vacío, se ejecuta varias veces y solo quiero que el alert se lance una vez.
 
Os pongo el código  de la función Salvar, que es donde tengo el quid de la cuestión:
 
Salvar : function()
{	
	SI_PROD_ER_NOMB.salvar = false;
 
	var par = $(this).parent().parent(); //tr
	par.css("background-color","#fff");
	var tdBotoes = par.children("td:nth-child(1)");
	var tdField2 = par.children("td:nth-child(2)");
	var tdField3 = par.children("td:nth-child(3)");
	var tdField4 = par.children("td:nth-child(4)");
	var tdField5 = par.children("td:nth-child(5)");
	var tdField6 = par.children("td:nth-child(6)");
	var tdField7 = par.children("td:nth-child(7)");
	var tdField8 = par.children("td:nth-child(8)");
	var tdField9 = par.children("td:nth-child(9)");
	var tdField10 = par.children("td:nth-child(10)");
	var tdField11 = par.children("td:nth-child(11)");
	var tdField12 = par.children("td:nth-child(12)");
	var tdField13 = par.children("td:nth-child(13)");
	var tdField14 = par.children("td:nth-child(14)");
 
	if (SI_PROD_ER_NOMB.op=="add")
	{	
		if (tdField3.children("input[type=text]").val()=='' 
			|| tdField4.children("input[type=text]").val()==''
			|| tdField6.children("input[type=text]").val()==''
			|| tdField7.children("input[type=text]").val()==''
			|| tdField9.children("input[type=text]").val()==''
			|| tdField10.children("input[type=text]").val()==''
			|| tdField13.children("input[type=text]").val()=='') {
				alert("All mandatory fields are not completed");
				par.css("background-color","#eee");
				SI_PROD_ER_NOMB.salvar = false;
		}
		else
		{	
			SI_PROD_ER_NOMB.salvar = true;
		}
	}
	else
	{
		if (SI_PROD_ER_NOMB.op=="edit")
		{	
			if (tdField7.children("input[type=text]").eq(0).val()=='' 
				|| tdField9.children("input[type=text]").eq(0).val()==''
				|| tdField10.children("input[type=text]").eq(0).val()==''
				|| tdField13.children("input[type=text]").eq(0).val()==''
				|| tdField14.children("input[type=text]").eq(0).val()=='') {
					alert("All mandatory fields are not completed"); // es este alert el que repite varias veces
					par.css("background-color","#eee");
					SI_PROD_ER_NOMB.salvar = false;
			}
			else
			{
				SI_PROD_ER_NOMB.salvar = true;									
			}
		}
		else
		{
			alert("La operación no está disponible");		
		}
	}
 
	if (SI_PROD_ER_NOMB.salvar) {
		tdBotoes.html("<img src='img/ico_edit.png' class='btnEditar center-block'/>");
		tdField2.html(tdField2.children("input[type=text]").val());
		tdField3.html(tdField3.children("input[type=text]").val());
		tdField4.html(tdField4.children("input[type=text]").val());
		tdField5.html(tdField5.children("input[type=text]").val());
		tdField6.html(tdField6.children("input[type=text]").val());
		tdField7.html(tdField7.children("input[type=text]").val());
		tdField8.html(tdField8.children("input[type=text]").val());
		tdField9.html(tdField9.children("input[type=text]").val());
		tdField10.html(tdField10.children("input[type=text]").val());
		tdField11.html(tdField11.children("input[type=text]").val());
		tdField12.html(tdField12.children("input[type=text]").val());
		tdField13.html(tdField13.children("input[type=text]").val());
		tdField14.html(tdField14.children("input[type=text]").val());
 
		$("#btnAdicionar").show();
	}
 
	$("#SI_PROD_ER_NOMB tbody").on('click', '.btnEditar', SI_PROD_ER_NOMB.Editar);
	$(".btnExcluir").bind("click", SI_PROD_ER_NOMB.Excluir);
	$(".btnCancel").bind("click", SI_PROD_ER_NOMB.Cancel);
},
 
Saludos. 
   
 



