Tengo un formulario con ~ 50 entradas. Los he inicializado todos con un solo selector de clase
<input class="common-class" id="firstname" value="Some data"> <input class="common-class" id="lastname" value="Some data">Tengo un complemento arbitrario (redactor) que realizará acciones en los contenidos. Necesito saber qué entrada se tocó.
function arbitraryPluginFunction(input) { /*Plugin doing whatever it has to do */ input.callback(); } $(document).ready(function() { $(".common-class").arbitraryPluginFunction({ initsetting1: "sample", initsetting2: "sample", callback: function() { console.log("You changed : " + $(this).attr("id")); }, }); });Tenga en cuenta el error en mi muestra porque $(this).attr() se refiere al objeto que se pasa al complemento. Tengo una solución poco elegante usando $.each, pero me pregunto si hay alguna forma adecuada.
*** Editar *** Aquí hay algo más cercano a la llamada real. Eliminé al redactor de mi pregunta para simplificar
$(document).ready(function() { $(".common-class").redactor({ changeCallback: function() { console.log("You changed : " + $(this).attr("id")); }); }); });A menos que me falte algo, puede pasar un selector a una función jquery y aplicará esa función a todos los elementos coincidentes.
Luego crea su función como $.fn.redactor y en la función $(this) corresponderá al elemento seleccionado.
$(document).ready(function() { $.fn.redactor = function(p){ $(this).on("input",function(){ p.changeCallback($(this).attr("id")); }); } $(".common-class").redactor({ changeCallback: function(id) { console.log("You changed : " + id); } }); }); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input class="common-class" id="firstname" value="Some data"> <input class="common-class" id="lastname" value="Some data">