Как мне создать событие onclick с динамическими параметрами с помощью Javascript?

#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;`; , которая в основном использует строковые литералы.