Escribo un complemento jQuery para poder reutilizar este código en muchos lugares, ya que es un código muy usado, el código en sí mismo agrega una nueva línea a una tabla que ha sido clonado desde una fila oculta, continúa realizando una carga de manipulaciones en la nueva fila.Programando una función de devolución de llamada dentro de un plugin de jQuery
actualmente estoy haciendo referencia así:
$(".abc .grid").grid();
Pero quiero incluir una devolución de llamada para que cada área de la plug-in se llama de puede hacer algo un poco más especial, cuando se ha añadido la fila . He utilizado el complemento jQuery AJAX antes, así que he usado la función de devolución de llamada success
, pero no puedo entender cómo funciona el código en segundo plano. Esto es lo que quiero lograr:
$(".abc .grid").grid({
row_added: function() {
// do something a bit more specific here
}
});
aquí es mi plug-in de código
(function($){
$.fn.extend({
//pass the options variable to the function
grid: function() {
return this.each(function() {
grid_table=$(this).find('.grid-table > tbody');
grid_hidden_row=$(this).find('.grid-hidden-row');
//console.debug(grid_hidden_row);
$(this).find('.grid-add-row').click(function(event) {
/*
* clone row takes a hidden dummy row, clones it and appends a unique row
* identifier to the id. Clone maintains our jQuery binds
*/
// get the last id
last_row=$(grid_table).find('tr:last').attr('id');
if(last_row===undefined) {
new_row=1;
} else {
new_row=parseInt(last_row.replace('row',''),10)+1;
}
// append element to target, changes it's id and shows it
$(grid_table).append($(grid_hidden_row).clone(true).attr('id','row'+new_row).removeClass('grid-hidden-row').show());
// append unique row identifier on id and name attribute of seledct, input and a
$('#row'+new_row).find('select, input, a').each(function(id) {
$(this).appendAttr('id','_row'+new_row);
$(this).replaceAttr('name','_REPLACE_',new_row);
});
// disable all the readonly_if_lines options if this is the first row
if(new_row==1) {
$('.readonly_if_lines :not(:selected)').attr('disabled','disabled');
}
});
$(this).find('.grid-remove-row').click(function(event) {
/*
* Remove row does what it says on the tin, as well as a few other house
* keeping bits and pieces
*/
// remove the parent tr
$(this).parents('tr').remove();
// recalculate the order value5
//calcTotal('.net_value ','#gridform','#gridform_total');
// if we've removed the last row remove readonly locks
row_count=grid_table.find('tr').size();
console.info(row_count);
if(row_count===0) {
$('.readonly_if_lines :disabled').removeAttr('disabled');
}
});
});
}
});
})(jQuery);
que he hecho por lo general la búsqueda en Elgoog ... pero me parece que esté recibiendo una gran cantidad de ruido con Poco resultado, cualquier ayuda sería muy apreciada.
Gracias!
Cheers, esto hace que sea muy fácil de entender :-), muchos ¡Gracias! –
@ILMV: seguro, no hay problema. Acabo de agregar un código para mostrarle cómo tener devoluciones de llamada predeterminadas para que no tenga que probar la existencia de devolución de llamada antes de llamarlos. Dependiendo de lo que esté haciendo, puede que necesite usar los métodos 'call' o' apply' para llamar a las funciones de devolución de llamada. Usarlos le permitirá cambiar el valor de 'this' dentro de la devolución de llamada. – Tauren