可编辑表格实现

最近做的项目中,需要用到可编辑表格,逻辑很简单,即通过双击将表格的td元素变为input,下面是实现:

首先是HTML代码,这个td为啥要自定义一个value,稍后解释

<table>
    <tbody>
      <tr>
        <td value="0.00">0.00</td>
      </tr>
    </tbody>
  </table>

接下来是js代码(项目里用的jquery)

$(".table").on("dblclick","td", function () {
  /* 1.先拿到这个td原来的值,然后将这个td添加一个input:text,并且原来的值不动 */
  var tdVal = $(this).attr("value");
  var initVal = "0.00";
  var inputVal;//输入数据
  var oInput = $("<input class='inputStyle' type='text'/>");
  oInput.val(tdVal);
  $(this).html(oInput);
  oInput.focus();
  /* 2.失去焦点,这个td变为原来的text,value为修改过后的value */
  oInput.blur(function () {
    inputVal = $(this).val() == "" ? tdVal : $(this).val();//输入为空时值变为零
    $(this).parent().removeClass("inputWrong");//inputWrong
    //对输入值进行校验,只能输入数字,若输入不合法,则输入框置红,不下发数据
      var regNum = /^(-|\+)?\d+(\.\d+)?$/
    if (!regNum.test(inputVal)) { 
      $(this).parent().addClass("inputWrong").focus().blur().select();
      return false;
    } else {
       $(this).parent().removeClass("inputWrong").attr("value", inputVal).html(inputVal);
    }
    //数据下发操作等
  });
});

双击td后,将input插入td,然后将td原本的值赋给input。

为什么不直接用text值而要用value呢?因为td的text在点击后被input覆盖了,而value属性在点击后不会发生变化,因此input可以显示原先的值;

 **************************************************************************************************************************************************************************

可编辑表格改进方法:

直接内嵌input,然后将input设置disabled,编辑时移除disabled属性,失焦后再恢复disabled。

这样写可以解决一个交互上的缺陷:单击时选中行背景色改变,再点击一次可编辑;

posted @ 2020-04-11 14:16  小巨人yimei  阅读(480)  评论(0编辑  收藏  举报