2

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

我正在使用带有 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>

你一定知道我有两个元素。第一个('content')用于编写文本,另一个('so_observer_heading_count')将更新第一个元素的符号数。

所以我的问题是,如何在另一个元素上设置属性。

我已经检查过名称是否正确,当我更改 2. 元素上的 textarea 内容时,我从第一个元素中获得了正确的数量。但我只想更改第一个元素中的内容以刷新数量。

而且我不想更改第一个元素的代码!不要被 textarea 弄糊涂了,以后这应该是一个标签或其他东西。

4

3 回答 3

2

首先:

不要使用内联事件绑定。始终使用“真正的”javascript,(这样您还可以防止转义引号的问题)这更清洁,更易于维护。

您的代码还有另一个问题:您在文本区域上有一个事件处理程序“keypress”,它在每个“keypress”上绑定另一个属性到您的内容元素。这不是很高效,而且很可能无法正常工作。这段代码应该是你需要的一切:

document.getElementById('content').addEventListener("keyup",function(){

    var obs  = document.getElementById('so_observer_heading_count');    

    obs.innerHTML = this.value.length;

});​

这是给你的演示

编辑:我将事件从keypressto更改keyup为 1) 正确计数 2) 考虑字符删除。

于 2012-07-09T08:42:05.433 回答
0

我会说“setAttribute”不适用于方法。改为尝试:

 document.getElementById('content').onkeypress = function() { document.getElementById('so_observer_heading_count').innerHTML = document.getElementById('content').value.length };
于 2012-07-09T08:33:43.063 回答
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 文件来执行此操作,该文件在文档加载/准备好时执行上述行,而不是每次按下一个键。

更新:轻微的编辑,所以我从你上面的代码中删除的任何东西都被添加回来,以防你想直接复制它。

于 2012-07-09T08:33:58.090 回答