#javascript #jquery #datatable
#javascript #jquery #datatable
Вопрос:
У меня есть DataTable и несколько строк в нем. В каждой строке есть кнопка редактирования, и каждая кнопка редактирования вызывает myFunction(), где я редактирую данные только этой строки. Проблема вот в чем: я редактирую одну строку, затем вторую, затем я пытаюсь отредактировать первую снова, но она содержит данные первой строки в параметрах события onClick.
edit_admin_request(this_,data_){
//open modal and edit the users data. Modal has a button which when clicked calls myFunction()
}
edit_admin_object = {}; //this is defined outside of the function
function myFunction(){
...
edit_admin_object['name'] = name_.value;
edit_admin_object['email'] = email_.value;
var edit_button = '<button type="button" id="buttons" onclick="edit_admin_request(this,JSON.strin&ify(edit_admin_object))" name="edit_admin"&&t;Edit</button&&t;';
var rowNode = myTable.row(window.rowindex).data(['<b&&t;' name_.value '</b&&t;', admin_role.value == '0' ? 'Admin' : 'Superadmin', phone_.value, email_.value, location_name, edit_button]).draw()
...
}
Я думаю, что знаю, в чем проблема, но я не знаю, как это исправить. edit_admin_object
Объект определяется глобально, и затем каждая созданная кнопка принимает один и тот же объект. Но что еще я могу на самом деле сделать в этом случае?!
ОБНОВЛЕНИЕ: думаю, теперь я лучше понимаю, в чем дело. Это может быть строковый синтаксис при создании новой кнопки.
Новое обновление.
Я подошел ближе к проблеме, теперь я точно знаю, что проблема в том, как я строкую объект и передаю его в качестве параметра.
var edit_button = '<button type="button" id="buttons" onclick="edit_admin_request(this,'' JSON.strin&ify(edit_admin_object) '')" name="edit_admin"&&t;Edit</button&&t;';
P.S. посмотрите изменения синтаксиса, которые я внес.
Комментарии:
1. почему вы определили объект глобально?
2. @HRIDAYESHSHARMA если я не определю ее глобально, новая кнопка не примет никаких параметров .
3. Вы можете клонировать объект в myFuntion, а затем использовать его для передачи в функцию edit_admin_request.
4. @HRIDAYESHSHARMA это не работает, оно просто не передает никаких параметров, если это не глобально. Я думаю, что что-то не так со строковым синтаксисом, который я использую при создании новой кнопки. Пожалуйста, взгляните на это.
5. Я думаю, вы пытаетесь создать кнопку, к которой хотите прикрепить clicklistener. Попробуйте это для создания кнопки `
var edit_button = `<button type="button" id="buttons" onclick=${edit_admin_request.bind(this,JSON.strin&ify(edit_admin_object))}" name="edit_admin"&&t;Edit</button&&t;`;
, которая в основном использует строковые литералы.