在没有jquery的情况下将文本添加到模糊的文本区域的值


Add text to value of textarea on blur without jquery

所以,我有一个记录注释的文本区域。我正在尝试在输入评论时将输入评论的用户的身份附加到评论的末尾。

下面是检查用户会话并获取用户名的 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

这是因为您正在添加不需要的" # "符号。 document.getElementById()只需要元素 id 的名称 ( history_comment )。该错误基本上告诉您它无法获取不存在的属性"value",即id为"#history_comment"的元素。

你不需要jQuery解决方案,除了拼写错误之外,你在这里拥有的东西很好。

Uncaught TypeError: Cannot read property 'value' of null

这是因为没有 ID 为"#history_comment"的元素。只有一个ID为"history_comment"。

此外,更改文本区域的值是通过更改其 .innerHTML 而不是 .value 来工作的。从文本区域读取值也是如此。

你为什么要通过Javascript来做到这一点?在通过 PHP 提交帖子后这样做不是更好吗?您现在的做法是,如果我多次"模糊"文本区域,则添加的文本会添加几次。

只是为了继续上面的答案...

原生JavaScript api document.getElementById只采用id,因为Jquery需要快捷方式符号,如'#','.内部它将使用相同的原生api,如document.getElementById。

由于文本区域是一个输入元素,它将具有 value 属性,而对于其他文档元素(如div),span table 将具有 innerHTML 属性。甚至输入元素也将具有 innerHTML 属性,但只会返回空。