所以,我有一个记录评论的表格的textarea。我试图在输入时将输入评论的用户的身份附加到评论的末尾。
这是用于检查用户会话并获取用户名称的PHP:
<?php
//getting username - displays John Doe
$user = Mage::getSingleton('admin/session');
$firstname = $user->getUser()->getFirstname();
$lastname = $user->getUser()->getLastname();
$append = " [name](by ".$firstname." ".$lastname.")[/name]";
?>
应该附加到模糊值的JavaScript:
<script>
function addedcomment(){
var commentby = document.getElementById("#history_comment").value;
var commentby = commentby + '<?php echo $append; ?>';
document.getElementById('#history_comment').value = commentby;
}
</script>
输入评论的文本区域:
<textarea name="history[comment]" rows="3" cols="5" style="height:6em; width:99%;" id="history_comment" onBlur="addedcomment()"></textarea>
代码完全按照此处显示的顺序和方式显示在页面上,因此PHP在JavaScript出现之前设置$ append的值。我在dom控制台中遇到三个错误:
Uncaught TypeError: Cannot read property 'value' of null
addedcomment
onblur
我使用的CMS与Prototype一起使用,因此即使在noConflict模式下,jQuery也不会一直工作(似乎有选择地被调用)。
我尝试过的事情:
Putting the JS below the textarea.
onblur vs onBlur
jQuery solution
答案 0 :(得分:5)
这是因为您要添加一个不需要的“#
”符号。 document.getElementById()
只需要元素id(history_comment
)的名称。该错误基本上告诉您它无法获取不存在的属性“value
”,即ID为“#history_comment
”的元素。
您不需要jQuery解决方案,除了拼写错误之外,您所拥有的内容很好。
答案 1 :(得分:4)
Uncaught TypeError: Cannot read property 'value' of null
那是因为没有ID&#34;#history_comment&#34;的元素。只有一个ID为#34; history_comment&#34;。
此外,更改textarea的值可以通过更改与.value相对的.innerHTML来实现。 读取textarea的值也是一样。
为什么要通过Javascript执行此操作? 在通过PHP提交帖子后,这样做会不会更好? 你现在这样做的方式,如果我&#34;模糊&#34; textarea几次添加的文本会多次添加。
答案 2 :(得分:1)
继续上面的答案......
原生JavaScript api document.getElementById只需要id,因为Jquery需要快捷符号,如&#39;#&#39;,&#39;。&#39;在内部它将使用相同的原生api,如document.getElementById。
由于文本区域是一个输入元素,它将具有value属性,对于div,span table等其他文档元素,innerHTML属性。即使输入元素也会有innerHTML属性,但只返回空。