【问题标题】:How to make jquery use a named function如何让 jquery 使用命名函数
【发布时间】:2016-03-08 18:59:16
【问题描述】:

我已经尝试这样做了几个小时,但它一直无法正常工作。我找不到原因。

我的 HTML:

<label>
Description<br>
(<span id='fieldLength'>0</span> Chars. ±1):

<textarea name='dataDescr' id='metaDescr'>Some Text Here.</textarea>
</label>

我所拥有的不起作用。它没有给我任何回应,萤火虫中没有控制台错误或任何形式的反馈:

jQuery:

counterChecker = function() {
    var max = 800;
    var lengthVal = $('#metaDescr').val().length;
    var fl = $('#fieldLength');
    if (lengthVal >= max) {
        var char = lengthVal - max;
        fl.text('Over by ' + char);
    }
    else {
        fl.text(lengthVal);
    }
}

$(document).ready(function() {
    $('#metaDescr').on("change", counterChecker() );
 });

编辑:如果函数在 文档准备好括号。

但是 DOES 的工作原理是将相同的代码作为匿名函数直接插入到 on change 函数中:

 $(document).ready(function() {

    $('#metaDescr').on("change", function() {
        var max = 800;
        var lengthTwo = $(this).val().length;
        var lf = $('#fieldLength');
        if (lengthTwo >= max) {
            var char = lengthTwo - max;
            lf.text('Over by ' + char);
        }
        else {
            lf.text(lengthTwo);
        }
    });
});

有人可以帮我理解为什么会有这种差异吗?

为什么它不能作为一个单独的调用函数工作,但不会给我的萤火虫带来任何错误,但它可以作为直接引用的(匿名?)函数工作。如何使其按预期运行,但将代码保存在单独的自包含功能单元中。

我正在使用 JQuery 1.11.3 并在过去几个小时内查看 many stackoverflow posts 并没有显示:-/

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    $('#metaDescr').on("change", counterChecker() );调用counterChecker函数并将返回值分配给onchange处理程序。在这种情况下,它返回 undefined 并将其用作更改侦听器。您想要的是$('#metaDescr').on("change", counterChecker);,它将引用传递给counterChecker 函数,该函数将在更改事件触发时调用。

    【讨论】:

    • 行得通,谢谢!我不敢相信我已经绕了几个小时了,结果只是一对空括号。呸呸呸。
    • 不要自责,这是一个很难调试的常见错误。你会在 SO 上看到很多关于 setTimeout 和 setInterval 的内容。
    • 我怀疑它也来自我使用大量 PHP 的函数,这些 PHP 函数的定义是这样定义的,后面跟着括号。同样没有括号,我认为 Javascript/JQuery 要求variable
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2016-01-29
    • 2014-05-31
    相关资源
    最近更新 更多