Javascript Can';t编辑HTML文本输入中的最后两个字符

Javascript Can';t编辑HTML文本输入中的最后两个字符,javascript,html,Javascript,Html,我首先要说的是,我不知道为什么会发生这种情况,就在昨天,它工作得很好。我有这个输入(它保存在Onblur事件中),我可以编辑输入中的所有内容,除了任何字段中的最后两个字符或数字。虽然这是固定的,因为某些原因。我似乎不记得今天早上以前发生过这种事。所以我期待着罗德·塞林随时会来告诉我,我实际上在暮色地带。我已经切换回以前的任何提交,当我使用新的提交时,由于某种原因,问题仍然存在。(即使在硬刷新和刷新内容以防JS过时之后)。其他一切都能正常工作,在模糊上正确保存值,这只是一个简单的事实,我不能更改输

我首先要说的是,我不知道为什么会发生这种情况,就在昨天,它工作得很好。我有这个输入(它保存在Onblur事件中),我可以编辑输入中的所有内容,除了任何字段中的最后两个字符或数字。虽然这是固定的,因为某些原因。我似乎不记得今天早上以前发生过这种事。所以我期待着罗德·塞林随时会来告诉我,我实际上在暮色地带。我已经切换回以前的任何提交,当我使用新的提交时,由于某种原因,问题仍然存在。(即使在硬刷新和刷新内容以防JS过时之后)。其他一切都能正常工作,在模糊上正确保存值,这只是一个简单的事实,我不能更改输入字段中的最后两个字符!!!(对不起,那是一个深夜)

编辑:对不起,我应该声明它是这样开始的:

<td onclick="addInput(this);" id="website_revenue:2017-03-16">$479,432.00</td>

好的,我想我在github中从一个差异中找到了答案。唯一真正的变化是CSS。输入似乎继承了对包含表的div的最新更改,该更改设置了从右到左的滚动(方向:rtl;),这将光标一直设置到右侧,并且出于某种原因,导致了此问题。如果我将输入本身设置为方向:ltr;问题已经解决了


所以我想知道,为什么direction:rtl会破坏输入?

通常不必使用
.setAttribute()
getAttribute()
——DOM将标准属性作为属性提供。因此,
elm.id
是“id”值,
elm.value
是“值”,等等。你说的“编辑”到底是什么意思?你是说当你聚焦到
元素时,你不能以交互方式改变值的最后一部分吗?你能用JS小提琴重现吗?正确。我根本无法删除它们。我可以向字段中添加其他数字或字母,但这两个数字或字母永远不会更改。另一件事:ajax“成功”处理程序中的循环非常脆弱。不能保证在“value”属性之前看到“key”属性,因为JavaScript对象属性没有顺序保证。
<input type="text" id="input:website_revenue:2017-03-06" value="$479,432.00" />
<input type="text" id="input:website_revenue:2017-03-06" value="360">
function addInput(elm) {
  if (elm.getElementsByTagName('input').length > 0) return;

  var value = elm.innerHTML;
  elm.innerHTML = '';

  var id = elm.getAttribute('id');

  if(value == "$0.00" || value == "0"){
    value = "";
  }

  var input = document.createElement('input');
  input.setAttribute('type', 'text');
  input.setAttribute('id', 'input:'+id);
  input.setAttribute('value', value);
  input.setAttribute('style', 'width:100px;');
  input.setAttribute('onBlur', 'closeInput(this)');
  elm.appendChild(input);
  input.focus();
}

function closeInput(elm) {
  var td = elm.parentNode;
  var value = elm.value;

  td.removeChild(elm);

  if(value == ""){
     td.innerHTML = "0";
  }else{  

  $.ajax({
    type: "GET",
    url: "/pages/process.php",
    data: "edit_data="+elm.id+"&value="+value,
    dataType: 'json',
    success: function(ret){
      if(ret.success === true){
         td.innerHTML = ret.value;

         if(ret.math === true){
           var targets = ret.targets;

           for (i in targets){
              for (key in targets[i]){
                if(key == "key"){
                  var newid = targets[i][key];
                }

                if(key == "value"){
                  var newval = Math.round(targets[i][key]);
                  var elm = document.getElementById(newid);
                  elm.innerHTML = newval;
                }
              }
           }

         }
      }else{
         $("#error").html("ERROR: These fields can only accept numbers!!");
         td.innerHTML = "ERROR";
      }
    }

  });

 } 
}