当由javascript产生的元素激活时,javascript不起作用

亨利5400

我遇到了一个看似简单但令人费解的javascript问题。这里有两个片段:两者几乎相同,除了后一个代码段的黄色输入框由Javascript生成。

这两个代码之间的区别是:

<table><tbody><tr class="newdiv"><td style="background:yellow">enter</td></tr></tbody></table> click the yellow box!
<br><textarea id="result"></textarea>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
// the script below enables typing 'enter' into textarea by clicking the yellow box.
$('.newdiv>td').click(function(){
    var range = document.createRange();
    range.selectNodeContents(this);  
    var sel = window.getSelection(); 
    sel.removeAllRanges(); 
    sel.addRange(range);
    insertAtCaret('result', sel);return false;
});
function insertAtCaret(areaId, text) {
  var txtarea = document.getElementById(areaId);
  if (!txtarea) {
    return;
  }
  var scrollPos = txtarea.scrollTop;
  var strPos = 0;
  var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
    "ff" : (document.selection ? "ie" : false));
  if (br == "ie") {
    txtarea.focus();
    var range = document.selection.createRange();
    range.moveStart('character', -txtarea.value.length);
    strPos = range.text.length;
  } else if (br == "ff") {
    strPos = txtarea.selectionStart;
  }
  var front = (txtarea.value).substring(0, strPos);
  var back = (txtarea.value).substring(strPos, txtarea.value.length);
  txtarea.value = front + text + back;
  strPos = strPos + text.length;
  txtarea.scrollTop = scrollPos;
}
</script>

<button onclick="myfunction()">show</button>
<div id="show"></div>
<br><textarea class="txta" id="result"></textarea>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
function myfunction(){
document.getElementById('show').innerHTML = `
<table><tbody><tr class="newdiv"><td style="background:yellow">enter</td></tr></tbody></table> click the yellow box!
`;
}
// the script below enables typing 'enter' into textarea by clicking the yellow box.
$('.newdiv>td').click(function(){
    var range = document.createRange();
    range.selectNodeContents(this);  
    var sel = window.getSelection(); 
    sel.removeAllRanges(); 
    sel.addRange(range);
    insertAtCaret('result', sel);return false;
});
function insertAtCaret(areaId, text) {
  var txtarea = document.getElementById(areaId);
  if (!txtarea) {
    return;
  }
  var scrollPos = txtarea.scrollTop;
  var strPos = 0;
  var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
    "ff" : (document.selection ? "ie" : false));
  if (br == "ie") {
    txtarea.focus();
    var range = document.selection.createRange();
    range.moveStart('character', -txtarea.value.length);
    strPos = range.text.length;
  } else if (br == "ff") {
    strPos = txtarea.selectionStart;
  }
  var front = (txtarea.value).substring(0, strPos);
  var back = (txtarea.value).substring(strPos, txtarea.value.length);
  txtarea.value = front + text + back;
  strPos = strPos + text.length;
  txtarea.scrollTop = scrollPos;
}
</script>

第二个片段的黄色框由以下部分产生:

function myfunction(){
document.getElementById('show').innerHTML = `
<table><tbody><tr class="newdiv"><td style="background:yellow">enter</td></tr></tbody></table> click the yellow box!
`;
}

第二个片段通过javascript函数生成黄色框,并且键入enter由jquery起作用。我的问题是:为什么函数在第一个代码段中起作用,而在第二个代码段中却不起作用,尽管它们之间的差异(以我的拙见)似乎并不影响功能本身?

超级明星

请使用以下代码更改代码。

$('.newdiv>td').click(function(){
    var range = document.createRange();
    range.selectNodeContents(this);  
    var sel = window.getSelection(); 
    sel.removeAllRanges(); 
    sel.addRange(range);
    insertAtCaret('result', sel);return false;
});

$(document).on('click', '.newdiv>td', function(){
    var range = document.createRange();
    range.selectNodeContents(this);  
    var sel = window.getSelection(); 
    sel.removeAllRanges(); 
    sel.addRange(range);
    insertAtCaret('result', sel);return false;
});

参考答案

<button onclick="myfunction()">show</button>
<div id="show"></div>
<br><textarea class="txta" id="result"></textarea>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
function myfunction(){
document.getElementById('show').innerHTML = `
<table><tbody><tr class="newdiv"><td style="background:yellow">enter</td></tr></tbody></table> click the yellow box!
`;
}
// the script below enables typing 'enter' into textarea by clicking the yellow box.
$(document).on('click', '.newdiv>td', function(){
    var range = document.createRange();
    range.selectNodeContents(this);  
    var sel = window.getSelection(); 
    sel.removeAllRanges(); 
    sel.addRange(range);
    insertAtCaret('result', sel);return false;
});
function insertAtCaret(areaId, text) {
  var txtarea = document.getElementById(areaId);
  if (!txtarea) {
    return;
  }
  var scrollPos = txtarea.scrollTop;
  var strPos = 0;
  var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
    "ff" : (document.selection ? "ie" : false));
  if (br == "ie") {
    txtarea.focus();
    var range = document.selection.createRange();
    range.moveStart('character', -txtarea.value.length);
    strPos = range.text.length;
  } else if (br == "ff") {
    strPos = txtarea.selectionStart;
  }
  var front = (txtarea.value).substring(0, strPos);
  var back = (txtarea.value).substring(strPos, txtarea.value.length);
  txtarea.value = front + text + back;
  strPos = strPos + text.length;
  txtarea.scrollTop = scrollPos;
}
</script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击时克隆的元素不起作用Javascript

来自分类Dev

Javascript获取元素的值不起作用

来自分类Dev

JavaScript [元素].innerHTML = htmlcode 不起作用

来自分类Dev

Javascript-使用Javascript生成HTML元素时,Magnific Popup不起作用

来自分类Dev

jQuery在由javascript创建的表上不起作用

来自分类Dev

javascript!=不起作用

来自分类Dev

放置元素的runat =“ server”时,ASP.NET JavaScript代码不起作用

来自分类Dev

当从子元素调用的javascript更改类时,CSS过渡不起作用

来自分类Dev

放置元素的runat =“ server”时,ASP.NET JavaScript代码不起作用

来自分类Dev

JavaScript添加的动态svg元素不起作用

来自分类Dev

Javascript / jQuery元素在页面重新加载之前不起作用

来自分类Dev

javascript()onclick隐藏元素-在Firefox中不起作用

来自分类Dev

JavaScript:按类单击元素不起作用

来自分类Dev

Javascript代码在html下拉选项元素中不起作用

来自分类Dev

Javascript / jQuery元素在重新加载页面之前不起作用

来自分类Dev

javascript()onclick隐藏元素-在Firefox中不起作用

来自分类Dev

Javascript 函数(对数组元素求和)不起作用

来自分类Dev

通过javascript创建HTML元素不起作用

来自分类Dev

JavaScript语法不起作用

来自分类Dev

onKeyUp不起作用的javascript

来自分类Dev

javascript关闭不起作用?

来自分类Dev

按键不起作用Javascript

来自分类Dev

MVC Javascript不起作用

来自分类Dev

JavaScript“ getParent()”不起作用

来自分类Dev

javascript replaceChild不起作用

来自分类Dev

Bootstrap JavaScript不起作用

来自分类Dev

javascript滑块不起作用

来自分类Dev

Javascript nextSibling不起作用

来自分类Dev

Javascript SpriteSheet不起作用

Related 相关文章

热门标签

归档