无法在Jquery中定义函数:“未捕获的ReferenceError:函数1未定义”

时间:2013-04-02 12:18:46

标签: javascript jquery

我有:

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

然而,当我更改textarea的文本时,没有任何反应。

我在控制台上收到此错误:

  

未捕获的ReferenceError:未定义function1

Live fiddle

4 个答案:

答案 0 :(得分: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范围

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

这让我知道textarea上的事件change就像jQuery的blur ...不确定,这就是你想要的结果。

评论后编辑

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

答案 2 :(得分:1)

  1. 更改定义函数的位置(在小提琴中,检查jQuery选择框附近的第二个下拉列表)
  2. 将函数定义移到domReady声明之外。

  3. 目前,您的函数解析如下:

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

    您需要在head标记内找到它。从下拉列表中选择no wrap - in <head>选项。

答案 3 :(得分:0)

那是因为你的function1只在传递给jQuery的匿名函数的范围内。
当你使用jQuery时,为什么不完全使用它?将.change()处理程序附加到.t1 -

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

Updated Fiddle