【问题标题】:How can I prevent that text is removed from textarea on press Enter-Key?如何防止在按 Enter-Key 时从 textarea 中删除文本?
【发布时间】:2017-06-28 13:20:24
【问题描述】:

当我在粉红色文本框中写入新文本并按enter 时,新文本会在该框中更新。

但是,如果我只是在粉红色的文本框内单击并且没有进行任何更改,然后按enter,那么站在那里的文本就会被删除。它不应该被删除。如果我不做任何更改,那么已经存在的文本应该继续存在。

function editable() {

        $(document).on('click', '.editable', function (event) {

            var element_height = $(this).closest( "td" ).height();
            var element_width = $(this).closest( "td" ).width();
            if ($(this).children("textarea").length > 0)
                return false;
            var tdObj = $(this);
            var preText = tdObj.html();
       var inputObj = $("<textarea>");
            tdObj.html("");
            inputObj.width(tdObj.width())
                .height(tdObj.height())
                .css({
                border: "0px",
                height: element_height,
                width: element_width,
            })
                .val($.trim(preText))
                .appendTo(tdObj)
                .trigger("focus")
                .trigger("select");
            inputObj.keyup(function (event) {
                
                if (13 == event.which) { // press ENTER-key
 
                    var datagroup = tdObj.data("group");
                    var dataid = tdObj.data("id");
                    var datacell = tdObj.data("cell");
                    var text = $(this).val();
   
                    
                    $("#" + datacell + "").val(text);
           
                    var number = text.replace(/,/g, ".");
                    tdObj.data('value', number);
                    var newData = tdObj.data("value")
                    tdObj.html(text);
            

                } else if (27 == event.which) { // press ESC-key
                    tdObj.html(preText);
                }
            });
            inputObj.click(function () {
                return false;
            });
            inputObj.blur(function (event) {
                tdObj.html(preText);
            });
        });
    }
    editable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<table>
  <thead>
    <tr style="background-color: #f9f9f9">
    <th class="td_name">Animal</th>
    </tr>
  </thead>
  <tr>
    <td class="td_description" style="background-color:pink">
      <input class="description_input" name="description[]" type="hidden" value="cat">
      <div style="width:100%; min-height:30px;" class="description editable td_textarea" data-value="cat">cat
      </div>
    </td>
  </tr>
</table>

【问题讨论】:

  • 我认为这是因为当你点击输入时它会选择文本,所以当你按下回车键时,它会用回车符(\r 或 \n)替换当前文本,这就是为什么你的文本消失。
  • @Nicolas 我认为选择文本非常好。但问题是,当我不更改文本时,文本消失了

标签: jquery keyup


【解决方案1】:

删除.trigger('select')

更新

function editable() {

        $(document).on('click', '.editable', function (event) {

            var element_height = $(this).closest( "td" ).height();
            var element_width = $(this).closest( "td" ).width();
            if ($(this).children("textarea").length > 0)
                return false;
            var tdObj = $(this);
            var preText = tdObj.html();
       var inputObj = $("<textarea>");
            tdObj.html("");
            inputObj.width(tdObj.width())
                .height(tdObj.height())
                .css({
                border: "0px",
                height: element_height,
                width: element_width,
            })
                .val($.trim(preText))
                .appendTo(tdObj)
                .trigger("focus")
                .trigger("select")
               
            inputObj.keydown(function (event) {
                
                if (13 == event.which) { // press ENTER-key
                    var datagroup = tdObj.data("group");
                    var dataid = tdObj.data("id");
                    var datacell = tdObj.data("cell");
                    var text = $(this).val();
   
                    
                    $("#" + datacell + "").val(text);
           
                    var number = text.replace(/,/g, ".");
                    tdObj.data('value', number);
                    var newData = tdObj.data("value")
                    tdObj.html(text);
            

                } else if (27 == event.which) { // press ESC-key
                    tdObj.html(preText);
                }
            });
            inputObj.click(function () {
                return false;
            });
            inputObj.blur(function (event) {
                tdObj.html(preText);
            });
        });
    }
    editable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<table>
  <thead>
    <tr style="background-color: #f9f9f9">
    <th class="td_name">Animal</th>
    </tr>
  </thead>
  <tr>
    <td class="td_description" style="background-color:pink">
      <input class="description_input" name="description[]" type="hidden" value="cat">
      <div style="width:100%; min-height:30px;" class="description editable td_textarea" data-value="cat">cat
      </div>
    </td>
  </tr>
</table>

或者

尝试使用keydown 而不是keyup

function editable() {

        $(document).on('click', '.editable', function (event) {

            var element_height = $(this).closest( "td" ).height();
            var element_width = $(this).closest( "td" ).width();
            if ($(this).children("textarea").length > 0)
                return false;
            var tdObj = $(this);
            var preText = tdObj.html();
       var inputObj = $("<textarea>");
            tdObj.html("");
            inputObj.width(tdObj.width())
                .height(tdObj.height())
                .css({
                border: "0px",
                height: element_height,
                width: element_width,
            })
                .val($.trim(preText))
                .appendTo(tdObj)
                .trigger("focus")
                .trigger("select")
               
            inputObj.keydown(function (event) {
                
                if (13 == event.which) { // press ENTER-key
                    var datagroup = tdObj.data("group");
                    var dataid = tdObj.data("id");
                    var datacell = tdObj.data("cell");
                    var text = $(this).val();
   
                    
                    $("#" + datacell + "").val(text);
           
                    var number = text.replace(/,/g, ".");
                    tdObj.data('value', number);
                    var newData = tdObj.data("value")
                    tdObj.html(text);
            

                } else if (27 == event.which) { // press ESC-key
                    tdObj.html(preText);
                }
            });
            inputObj.click(function () {
                return false;
            });
            inputObj.blur(function (event) {
                tdObj.html(preText);
            });
        });
    }
    editable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<table>
  <thead>
    <tr style="background-color: #f9f9f9">
    <th class="td_name">Animal</th>
    </tr>
  </thead>
  <tr>
    <td class="td_description" style="background-color:pink">
      <input class="description_input" name="description[]" type="hidden" value="cat">
      <div style="width:100%; min-height:30px;" class="description editable td_textarea" data-value="cat">cat
      </div>
    </td>
  </tr>
</table>

【讨论】:

  • 您的解决方案阻止该字段可食用。 jsfiddle.net/sdby6r5u
  • 是的,就像尼古拉斯说的,现在我不能写新的文本了
  • @Jarla .ok 尝试第一个删除trigger('select')
  • 尝试使用 keydown 而不是 keyup @Jarla 。它也使用选择功能来执行
  • 啊等一下,如果我再次添加触发器('select'),它会起作用。
猜你喜欢
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
相关资源
最近更新 更多