1

Im doing a simple jquery function using rangy script but im not being able to get it work, it says the error above.

<div onclick="cmon('cenas');"> cenas </div>

 <textarea class="guides_chapters_textarea" id="textarea" name="gmessage" rows="7" cols="25"> Insert starting items here</textarea>

Javascript:

function cmon(text){
    $("#textarea").insertText(text, 0, "collapseToEnd");
}

Jsfiddle: http://jsfiddle.net/VmhMM/

4

2 回答 2

3

为了使您的示例正常工作,您可以做一些事情。严格来说,您的代码实际上没有任何问题。错误在于您的代码是如何被使用/添加到页面的。

这是window通过直接在对象上设置函数来使代码正常工作的一种方法。

window.cmon = function cmon(text){
    $("#textarea").insertText(text, 0, "collapseToEnd");
}

@elclanrs 在对问题的评论中提到的另一种方法(在这种情况下是一个更好的选择)指向 JSFiddle 左侧面板中的设置,用于处理您的函数的运行位置。默认情况下,它将它添加到onLoad事件中,这使得函数超出范围,因为它是在事件内部定义的。这正是 JSFiddle 对您的代码所做的:

$(window).load(function(){
    function cmon(text){
    $("#textarea").insertText(text, 0, "collapseToEnd");
    }
});

正在发生的概念称为闭包。因此,当您定义一个函数时,其中定义的任何变量或其他函数都无法从外部访问。如果您在全局对象或新定义的函数范围之外的任何其他对象上设置变量(就像我在链接的示例中所做的那样),您可以访问您在闭包之外定义的内容。

于 2013-08-03T09:23:42.237 回答
0

您必须在左侧使用(没有包裹在头部)。这意味着您必须在标签之间加载此脚本。但是,如果您仍然想在 onload 上使用它,那么:

<div id="cmon"> cenas </div>
     <textarea class="guides_chapters_textarea" id="textarea" name="gmessage" rows="7" cols="25"> Insert starting items here</textarea>
    <script>

        $("#cmon").click(function(){
            cmon($(this).text());
        });

        function cmon(text){
            $("#textarea").insertText(text, 0, "collapseToEnd");
        }
    </script>

这是解决方案:http: //jsfiddle.net/VmhMM/2/

于 2013-08-03T09:23:34.650 回答