未捕获的ReferenceError:未定义函数

时间:2013-08-03 09:10:48

标签: javascript rangy

我正在使用rangy脚本执行一个简单的jquery函数,但我无法使其工作,它说上面的错误。

<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/

2 个答案:

答案 0 :(得分:3)

为了让您的示例正常运行,您可以执行一些操作。严格来说,您的代码实际上没有任何问题。错误在于如何使用/添加代码到页面。

通过直接在window对象上设置函数,

Here is one让代码工作的方法。

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");
    }
});

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

答案 1 :(得分: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/