1

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/

4

2 に答える 2

3

例を機能させるために、できることがいくつかあります。厳密に言えば、実際にはコードに問題はありません。欠点は、コードがどのように使用されているか、ページに追加されているかにあります。

windowオブジェクトに関数を直接設定することにより、コードを機能させる方法の1 つを次に示します。

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

左側で使用する必要があります (頭に巻き付けないでください)。これは、タグ間でこのスクリプトをロードする必要があることを意味します。ただし、それでもオンロードで使用したい場合は、次のようにします。

<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 に答える