Estoy usando Datatables e intento completar la tabla de datos a través de una llamada ajax. En la tabla de datos, he agregado una funcionalidad de cuadro de texto para que los usuarios puedan cambiar el valor de las calificaciones finales. Una vez que el usuario ha cambiado el valor de las calificaciones finales, quiero usar una función onblur para guardar ese nuevo valor de calificaciones finales en la base de datos. Así que tengo que pasar rosterID y nuevas marcas finales a la función onblur. Pero no sé cómo pasar 2 parámetros en esto. He decidido pasarle un objeto llamado "obj". Pero no pasa en absoluto a la función y el parámetro formal de la función "obj1" parece indefinido. Aquí está mi código.
// piece of code from my datatables AJAX call. { data: 'SrNo', title: "Sr No" }, // 0 { data: 'RosterID', title: "Roster ID", visible: false }, // 1 { data: 'RollNo', title: "Roll No" }, // 2 { data: 'StudentName', title: "Student Name" }, // 3 { data: 'FinalScore', title: "Final Score", //4 render: function (data, type, full, row) { var obj = { ros: full.RosterID, final: full.FinalScore } return '<input class="form-control" id="DTFinalaTermMarks" name="DTFinalaTermMarks" type="text" onblur="updateFinalTermScore('+obj+');" value = ' + data + ' >'; } }, { data: 'WeightedScore', title: "Weighted Score"}, //5 // function with formal parameter function updateFinalTermScore(obj1) { var roterID = obj1.ros; alert("hi"); } ``` kindly help.
El objeto que necesitas usar es this
.
updateFinalTermScore(this)
En el contexto de un evento como onblur
, creado en un renderizador de columnas, tendría el siguiente aspecto:
{ title: "Salary", data: "salary", render: function (data, type, row, meta) { return '<input class="form-control" id="DTFinalaTermMarks" ' + 'name="DTFinalaTermMarks" type="text" ' + 'onblur="updateFinalTermScore(this, ' + '\'' + row.RosterID + '\'' + ');" ' + 'value = ' + data + ' >'; } }
La declaración de return
usa la concatenación de cadenas para crear el HTML requerido.
El objeto this
representa el contexto del evento onblur
, el nodo para el que ocurrió el evento. En este caso, ese es el elemento <input>
relevante.
Debe utilizar este enfoque para poder acceder al valor del elemento <input>
, que puede haber sido actualizado por el usuario antes del evento onblur
.
El HTML resultante creado por la función de procesamiento de DataTables es:
<input class="form-control" id="DTFinalaTermMarks" name="DTFinalaTermMarks" type="text" onblur="updateFinalTermScore(this, '123');" value="456">
Aquí, 123
es el ID de la lista. Supongo que este es un valor de cadena, por lo que uso '\''
para encerrar ese valor entre comillas simples.
Cuando ocurre el evento onblur
, updateFinalTermScore
puede acceder al nodo representado por this
y extraer el valor proporcionado por el usuario usando la función jQuery val()
:
function updateFinalTermScore(node, salary) { console.log( $( node ).val() ); console.log( RosterID ); }