1

私は持っている:

<textarea class="t1" onchange="function1('1','2','3')"></textarea>

<script type="text/javascript">
    $(function() {
        var function1 = function(p1, p2, p3) {
            alert('p1:' + p1 + ' p2:' + p2 + ' p3:' + p3);
        };
    });
</script>

しかし、テキストエリアのテキストを変更しても何も起こりません。

コンソールに次のエラーが表示されます。

Uncaught ReferenceError: function1 が定義されていません

ライブフィドル

4

4 に答える 4

1

jQuery を使用している場合:

<textarea class="t1"></textarea>

<script type="text/javascript">
    $(function() {
        $('.t1').on('change', function(){
            function1('1','2','3');
        });
        var function1 = function(p1, p2, p3) {
            alert('p1:' + p1 + ' p2:' + p2 + ' p3:' + p3);
        };
    });
</script>

http://jsfiddle.net/U4sx7/

changeテキストエリアでのイベントはblurjQuery のようなものだということがわかりました…よくわかりませんが、最終的にはそれが必要なのです。

コメント後に編集

<textarea class="t1" data-pam1="1" data-pam2="2" data-pam3="3"></textarea>

<script type="text/javascript">
    $(function() {
        var function1 = function(p1, p2, p3) {
                alert('p1:' + p1 + ' p2:' + p2 + ' p3:' + p3);
        };
        $('.t1').on('change', function(){
           var param1 = $(this).data('pam1'),
               param2 = $(this).data('pam2'),
               param3 = $(this).data('pam3');
           function1(param1,param2,param3);
         });
     });
</script>

http://jsfiddle.net/U4sx7/1/

于 2013-04-02T12:28:21.340 に答える
1
  1. 関数が定義されている位置を変更します (フィドルで、jQuery 選択ボックスの近くにある 2 番目のドロップダウンをオンにします)。
  2. 関数定義をdomReady宣言の外に移動します。

現在、関数は次のように解析されます。

$(window).load(function(){
var function1 = function (p1, p2, p3) {
    alert('p1:' + p1 + ' p2:' + p2 + ' p3:' + p3);
};
});

head代わりにタグ内に必要です。ドロップno wrap - in <head>ダウンからオプションを選択します。

于 2013-04-02T12:29:04.047 に答える
1

このようにしてみてください

 <script type="text/javascript">
        var function1 = function(p1, p2, p3) {
            alert('p1:' + p1 + ' p2:' + p2 + ' p3:' + p3);
        };
 </script>

 <textarea class="t1" onchange="function1('1','2','3')"></textarea>

最初に関数を定義(初期化)する必要はなく、それを呼び出すことができます....そして下で定義しないでください

$(function(){..HERE..})

その後、GLOBAL スコープに入る

于 2013-04-02T12:20:46.710 に答える
0

これは、function1 が jQuery に渡される無名関数のスコープ内にのみあるためです。
あなたはjQueryを使っているのだから、それをフル活用してみませんか? .change()ハンドラーをアタッチする.t1-

$(function () {
  $(".t1").change(function(){
    alert("Do your thing here");
  });
});

更新されたフィドル

于 2013-04-02T12:23:37.270 に答える