有没有大神有办法让表格编辑只能输入数字

提问 已结
18 338
枭
6天前
悬赏:80飞吻
版本:layui 浏览器:
如题,最好是不要改源码了,项目组不让我改源码。
搜了很多说用template,试了好久都不行,感觉原因可能是因为我的表格一开始是隐藏的,而且数据也不是一开始就有的,是后面选择插入进去的。
用edit:"text",还是可以用的,经理说要只能数字的。
哪位大神帮帮忙。
回帖


  • 这是我解决的办法,如果输入的不是数字直接置为0
    1 回复
  • 枭
    6天前
    @半杯湖底沙 @一条大黑狗
    w3school找到这个delegate这个方法
    http://www.w3school.com.cn/jquery/event_delegate.asp
    可以给生成的input绑定事件,代码如下,不过由于没有设置type,当中文输入法时,还是有可能把中文字符给输入进去,所以最后还是去扩展了下源码,配合下面的代码使用可以解决,期待更好的方法
    1 回复
  • 我看了下说明文档,有return字段和值就好办了,加个判断就ok了,不知道对不对[微笑]
    <script src="//res.layui.com/layui/dist/layui.js" charset="utf-8"></script>
    <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
    <script>
    layui.use('table', function(){
    var table = layui.table;

    //监听单元格编辑
    table.on('edit(test3)', function(obj){
    var value = obj.value //得到修改后的值
    ,data = obj.data //得到所在行所有键值
    ,field = obj.field; //得到字段
    layer.msg('[ID: '+ data.id +'] ' + field + ' 字段更改为:'+ value);
    });
    });
    </script>
    0 回复
  • 枭
    6天前
    @一条大黑狗 我之前有用过这种办法,不过这个是当编辑列失去焦点的时候才触发的,不太符合我们经理的想法-_-,到下周一如果没有更好的答案,飞吻就给你了。
    0 回复
  • 枭
    6天前
    @半杯湖底沙 没明白你的意思,而且好像也没给出解决办法呢
    0 回复
  • @ 我的思路和楼上那位兄弟一样,他已经给你用正则判断写出来了。另外你说不要在失去焦点的时候才触发,我想了下使用绑定click事件的法子似乎行不通,因为都是临时生成的input元素,没法绑定……我也蛮好奇更好的解决方案。
    0 回复
  • @ 有了,看看这样能不能绑定上,给input绑定click事件后,点击获取父级元素<td>的date属性,判断是不是要求的那个字段,如果是,给当前input标签加type="number"属性,大概思路是这样……
    if($("td").attr("data-field") == "email"){
    //找到td标签后判断data-field属性的字段
    }
    0 回复
  • 枭
    6天前
    @半杯湖底沙 应该没办法给input绑定时间吧,input的动态生成的
    0 回复
  • 枭
    6天前
    @半杯湖底沙
    也写过更精准的选择器,debug没进去
    0 回复
  • @ jquery可以监听全部input标签
    $("input.layui-table-edit").click(function(){
    ……
    }
    我也是刚刚找到layui这个框架,说明都还没看全[衰]
    0 回复
  • @ 额,还真的不能触发click事件,我再看看
    0 回复
  • 枭
    6天前
    @半杯湖底沙 input是点击<td>后动态生成的,给他监听是监听不到的,可以监听td的方法,刚才试着修改type,报错显示不能修改type,后来又修修改改,现在可以点击两次td的情况下实现我的功能,现在看看能不能第一次就能处理了
    $("#giveTable+.layui-form .layui-table>tbody>tr>td[data-field='totalQty']").click(function () {
    $(this).children("input").keydown(function (e) {
    debugger;
    var code = parseInt(e.keyCode);
    if (code >= 96 && code <= 105 || code >= 48 && code <= 57 || code == 8) {
    return true;
    } else {
    return false;
    }
    });
    });
    0 回复
  • 枭
    6天前
    @半杯湖底沙 giveTable是我table的html代码的id,totalQty是字段。
    0 回复
  • @ [挖鼻] 对啊对啊,不能找父元素那就找子节点,哈哈哈我javascript半吊子的水平……[阴险]
    0 回复
  • @ 嗯,这个写法更加简洁,不需要找子节点,学到了[good]
    0 回复
  • @ 可以,学到了
    0 回复
  • @ 判断条件用正则呢.可以实现吗
    0 回复
  • 枭
    6天前
    @一条大黑狗 我这里是用keyCode,如果改成key的话就可以获得字符,但是当输入是退格键时key是“Backspace”,用正则还得加规则,用keyCode的话判断是8.
    0 回复