JavaScript setAttribute在另一个元素上

时间:2012-07-09 08:00:38

标签: javascript element extern setattribute

我在另一个元素上设置属性时遇到问题。

我正在使用带有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混淆,将来这将是一个标签或其他东西。

3 个答案:

答案 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文件来执行此操作,该文件在文档加载/就绪时执行上述行,而不是每次按下一个键。

更新:轻微编辑,以便我从上面的代码中删除的任何内容都被添加回来,因为您只想直接复制它。