редактируемая таблица JavaScript не работает должным образом

0

Я использую следующий код, чтобы сделать таблицу html редактируемой (этот код получен из ссылки онлайн-учебника: http://mrbool.com/how-to-create-an-editable-html-table-with-jquery/27425).

$("td").dblclick(function () {
        //Obtain and record the value in the cell being edited. This value will be used later
        var OriginalContent = $(this).text();

        //Addition of class cellEditing the cell in which the user has double-clicked
        $(this).addClass("cellEditing");
        //Inserting an input in the cell containing the value that was originally on this.
        $(this).html("<input type='text' value='" + OriginalContent + "' />");
        //directing the focus (cursor) to the input that was just created, so that the user does not need to click on it again.
        $(this).children().first().focus();

        //the opening and closing function that handles the keypress event of the input. 
        //A reserved word this refers to the cell that was clicked. 
        //We use the functions first and children to get the first child element of the cell, ie the input.
        $(this).children().first().keypress(function (e) {
            //check if the pressed key is the Enter key
            if (e.which == 13) {
                var newContent = $(this).val();
                $(this).parent().text(newContent);
                $(this).parent().removeClass("cellEditing");
            }
        });

    $(this).children().first().blur(function(){
        $(this).parent().text(OriginalContent);
        $(this).parent().removeClass("cellEditing");
    });
    });

Кажется, он работает нормально. Затем я использую следующую функцию для чтения содержимого таблицы и создания json-представления:

function showRefTable(){

  var headers = [];
  var objects = [];
  var headerRow = $('#dataTable thead tr');
  var rows = $('#dataTable tbody tr');

  headerRow.find('th').each(function(){
    headers.push($(this).text());
  });


  for (var i=0; i<rows.length; i++){
    var row = rows.eq(i);
    var object = new Object();
    for (var j=0; j<row.find('td').length; j++){
      object[headers[j]] = row.find('td').eq(j).text();
    }
    objects.push(object);

  }

  var json = JSON.stringify(objects);
  alert(json);

}

Эта функция используется как обратный вызов события onclick. Проблема в том, что функция, используемая для чтения содержимого таблицы, показывает исходное содержимое, даже если я делаю редактирование (показать источник страницы показывает исходное содержимое).

благодаря

  • 0
    Не является ли $(this).parent().text(OriginalContent);' in the случае размытия просто повторное применение исходного текста?
  • 0
    проблема заключается в $ (this) .parent (). text (newContent); $ (this) .parent (). text () возвращает пустой текст
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Очень плохо читать содержимое таблицы из.text(). Вы не сможете использовать форматирование чисел и многих других проблем. Лучше хранить содержимое таблицы в автономном объекте данных и перерисовывать таблицу из нее каждый раз, когда пользователь меняет значения.

Я бы посоветовал использовать сетку kendo - это мощная, надежная таблица js.

EDIT: ваша функция не работает, потому что вы сказали, что называете это обратным вызовом на событие onclick. Таким образом, вы читаете содержимое таблицы, прежде чем они действительно изменились. Вы должны прочитать содержимое, когда оно будет сохранено. В вашем случае попробуйте позвонить вам, когда пользователь сохранит вход (нажмите Enter)

 if (e.which == 13) {
            var newContent = $(this).val();
            $(this).parent().text(newContent);
            $(this).parent().removeClass("cellEditing");

          //Now, when content is changed, call your function
          showRefTable();
        }
  • 0
    но это не отвечает на мой вопрос
  • 0
    посмотрите мои правки, надеюсь, это поможет. Но опять же - не используйте такое встроенное редактирование. По крайней мере, сохраняйте содержимое в $ (element) .data - они будут интерпретироваться так, как они были введены

Ещё вопросы

Сообщество Overcoder
Наверх
Меню