在没有jquery的模糊下将文本添加到textarea的值

时间:2014-11-17 21:51:57

标签: javascript php html

所以,我有一个记录评论的表格的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

3 个答案:

答案 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属性,但只返回空。