Отображение ввода html-формы в объект javascript внутри вновь сформированного элемента

У меня есть следующий HTML. Пожалуйста, взгляните на это, и я объясню проблему, как и когда мы пойдем вместе.

<table>
<tbody>
<tr id="<?php echo $record['id']?>" style="...">
   <td><?php echo $record['id']; ?></td>
   <td><?php echo $record['url']; ?></td>
   <td><input type="button" name="edit" value="Edit" onclick="edit(<?php echo ($record['id'])?>)"></td>
</tr>
</tbody>
</table>

Здесь я пытаюсь достичь того, что когда я нажимаю кнопку "Редактировать", он очищает это поле и создает вместо него новые пустые поля, в которые эти данные можно вводить снова, а вместо кнопки редактирования появляется кнопка обновления.

Вот как выглядит функция редактирования:

<script>
function edit(id){
  var element = document.getElementById(id);
  $(element).empty();
  $(element).append("<td><input  name='id' value="+id+" disabled></td>" +
                    "<td><input type='text' name='url' ></td>" +
                    "<td><input type='text' name='title'></td>" +
                    "<td><input type='button' value='Update' onclick='testFunction()'></td>");
}

Кнопка обновления запускает функцию с именем testFunction. Теперь в этой функции testFunction я хочу отправить новые значения в новую форму, которую я создал с помощью jQuery, чтобы я мог отправлять эти значения в MySQL, чтобы новое значение title обновлялось для данного идентификатора.

Пожалуйста, просмотрите код и скажите, как мне решить эту проблему?

var testFunction = function(newID){
        console.log("This is the NEW id of the object that we are changing----->");
        console.log(newID);
        console.log("--------------------------END------------------");
        $.post( "update", { id: newID})
            .done(function( ) {
                document.getElementById(id).style.display = "none";
            });
    };
</script>

1 ответ

Решение

//test record
var record = {
  id: 12345,
  title: 'Some title',
  url: 'https://stackru.com/posts/45861223/edit'
};

function action(id) {
  var $element = $('#' + id),
    $title = $('[name=title]', $element),
    $url = $('[name=url]', $element),
    $btn = $('[type=button]', $element),
    isUpdate = ($btn.attr('value') != 'Edit');


  $title.prop('readOnly', isUpdate);
  $url.prop('readOnly', isUpdate);
  $btn.attr('value', isUpdate ? 'Edit' : 'Update');

  if (isUpdate) {
    // show some loading mask
    $.post("update", {
        title: $title.val(),
        url: $url.val(),
        id: id
      })
      .done(function() {
        // here you have the new id from the server
        // hide the loading mask
      });
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr id="12345">
      <td><input type='text' name='title' value="Some title" readOnly></td>
      <td><input type='text' name='url' value="https://stackru.com/posts/45861223/edit" readOnly></td>
      <td><input type="button" name="edit" value="Edit" onclick="action(12345)"></td>
    </tr>
  </tbody>
</table>

Другие вопросы по тегам