我在另一个元素上设置属性时遇到问题。
我正在使用带有JS和HTML的PHP代码,它看起来像:
<textarea name='$id' id='$id' class='regular-text' cols='60' rows='1' tabindex='2'"
. "onkeypress =\"javascript:document.getElementById('content').setAttribute('onkeypress', document.getElementById('so_observer_heading_count').innerHTML = document.getElementById('content').value.length)\">$value</textarea>
你必须知道我有2个元素。第一个(&#39;内容&#39;)我用来写文本而另一个(&#39; so_observer_heading_count&#39;)应该更新第一个元素的符号数。
所以我的问题是,如何在另一个元素上设置属性。
我已经检查过该名称是否正确,当我更改2.元素上textarea的内容时,我从第一个元素中得到了正确的数量。但我只想更改第一个元素中的内容以刷新数量。
我不想改变第一个元素的代码!并且不要被textarea混淆,将来这将是一个标签或其他东西。
答案 0 :(得分:2)
首先:
不要使用内联事件绑定。总是使用“真正的”javascript,(这样你也可以防止转义你的报价的问题)这更加清晰,更加可用。
此外,您的代码还有另一个问题:您在textarea上有一个eventhandler“keypress”,它将每个“keypress”绑定到您的content-element的另一个属性。这不是很高效,大多数人都无法正常工作。此代码应该是您需要的一切:
document.getElementById('content').addEventListener("keyup",function(){
var obs = document.getElementById('so_observer_heading_count');
obs.innerHTML = this.value.length;
});
以下是 demo 。
修改:我将事件从keypress
更改为keyup
至1)正确计数2)将charakter删除考虑在内。
答案 1 :(得分:0)
我会说“setAttribute”不适用于某个方法。请尝试改为:
document.getElementById('content').onkeypress = function() { document.getElementById('so_observer_heading_count').innerHTML = document.getElementById('content').value.length };
答案 2 :(得分:0)
嗯,肯定有更多......这样做的有效方法,但你忘记做的事情是逃避你的单引号,所以js将你的事件视为一个字符串,而不是解析最终结果:
<textarea name='$id' id='$id' class='regular-text' cols='60' rows='1' tabindex='2'"
. "onkeypress =\"document.getElementById('content').setAttribute('onkeypress', 'document.getElementById(\'so_observer_heading_count\').innerHTML = document.getElementById(\'content\').value.length;')\">$value</textarea>
另外..我个人会通过一个包含的js文件来执行此操作,该文件在文档加载/就绪时执行上述行,而不是每次按下一个键。
更新:轻微编辑,以便我从上面的代码中删除的任何内容都被添加回来,因为您只想直接复制它。