Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript使输入字段处于编辑模式(插入模式)_Javascript - Fatal编程技术网

Javascript使输入字段处于编辑模式(插入模式)

Javascript使输入字段处于编辑模式(插入模式),javascript,Javascript,如何在javascript中使输入字段可编辑。我的意思是把它放在插入模式,这样值就可以被覆盖。任何建议???编辑:可能完全脱离主题,取决于问题背后的含义 如果您可以使用jQuery,就可以这样做 如果您必须滚动自己的代码,请查看该插件是如何工作的,并将其用作起点 基本上,这些步骤是: onFocus/onClick-用输入交换字段 当用户“完成”(点击回车键,点击按钮)后,通过Ajax将结果推回到服务器 请求完成后,使用新值更新接口,隐藏输入 在做了一些谷歌搜索之后,我想联系一下。它可能会尝试一

如何在javascript中使输入字段可编辑。我的意思是把它放在插入模式,这样值就可以被覆盖。任何建议???

编辑:可能完全脱离主题,取决于问题背后的含义

如果您可以使用jQuery,就可以这样做

如果您必须滚动自己的代码,请查看该插件是如何工作的,并将其用作起点

基本上,这些步骤是:

  • onFocus/onClick-用输入交换字段
  • 当用户“完成”(点击回车键,点击按钮)后,通过Ajax将结果推回到服务器
  • 请求完成后,使用新值更新接口,隐藏输入

  • 在做了一些谷歌搜索之后,我想联系一下。它可能会尝试一下下面的代码,但它可能只在特定操作系统的特定浏览器中工作,但无论如何值得一试

    document.execCommand('OverWrite', false, true);
    document.execCommand('OverWrite', false, false);
    
    根据您的要求,我想说的是,实施工作如下:

    <input type="text" 
        onFocus="document.execCommand('OverWrite', false, true);"
        onBlur="document.execCommand('OverWrite', false, false);">
    

    您可以尝试通过在keyup上重写输入值来模拟插入模式:

    var input = $('input'); // your input element
    
    Event.observe(input, 'keydown', function(e) { // event handler
       input._lastvalue = input.value;
    });
    
    Event.observe(input, 'keyup', function(e) { // event handler
        if(input.value == input._lastvalue) return;
        if(input.value.length <= input._lastvalue.length) return;
        var caretPos = doGetCaretPosition(input);
        input.value = input.value.slice(0,caretPos) + input.value.slice(caretPos+1);
        doSetCaretPosition(input, caretPos);
    });
    
    var-input=$('input');//您的输入元素
    观察(输入'keydown',函数(e){//事件处理程序
    输入。_lastvalue=input.value;
    });
    观察(输入'keyup',函数(e){//事件处理程序
    if(input.value==input.\u lastvalue)返回;
    
    if(input.value.length这在现代浏览器(也在手机上)中应该可以使用:


    注意:这是插入功能的一种基本形式,因此一些默认功能(如CTRL+Z)可能会中断。

    输入字段不是已经可编辑了吗?你说的是对的?@mplacona:他的意思是模仿键盘上的插入按钮来覆盖以下字符。我将其理解为实现就地编辑,但也可以理解为savi正在将一个普通的、旧的输入输入到数据库中。需要更多的澄清。@ajm:你是对的,它可以读取任何一种方式。+1,我只是想提出这个建议。我更喜欢将这个插件称为“绝地表”。哇。从现在起我将使用绝地表。如果它更兼容跨浏览器,我会在这里使用+1。事实上,只有互联网爆炸rer支持它。事实上,似乎只有IE支持输入覆盖的插入键。我尝试过使用它,但没有成功…你能提供一个shor示例,如何实现它。我正在使用onKeypress事件。感谢2020更新:这适用于IE,但不适用于Firefox、Chromium或Edge Legacy。插入键在Chro的内容可编辑区域中有效mium,但不是Firefox。感谢您的努力…我尝试了这些示例,但实际上它尝试选择剩余的所有字符并删除它们。Oops没有在IE上测试,只有FF。谢谢您,它至少对我有用。使用此解决方案,您不幸地失去了ctrl-z功能。@DiegoPamio不幸的是。我已经尝试创建自己的ctrl+z impl校正,但在许多情况下都失败。这同样有效:
    This.setSelectionRange(This.selectionStart,This.selectionStart+1);
    var input = document.querySelector('input'); // or a textarea
    input.addEventListener('keypress', function(){
        var s = this.selectionStart;
        this.value = this.value.substr(0, s) + this.value.substr(s + 1);
        this.selectionEnd = s;
    }, false);