【问题标题】:jQuery event fires once, then never againjQuery 事件触发一次,然后再也不会触发
【发布时间】:2014-12-05 01:13:28
【问题描述】:

我已经与一个简单的 JQuery 事件处理程序搏斗了好几个小时。 我的事件处理程序仅在页面加载时触发一次,无论事件或与选择框的交互如何,都不会再次触发。 延迟时,警报(当我有警报时)显示第一个选择选项。如果不是,则警报为空白。

我想要的只是从 AJAX 加载选择框并让用户选择触发另一个 AJAX 调用。

HTML:

<select id="connection" name="Connection"></select>
<div id="testme" style="background: #CCC; width:100%; height:50px;position:relative;color:red">testing</div>

Javascript:

$(document).ready(function () {
    // Event handler. Tried as a separate function and as a parameter to $.on(...)
    function connectionSelected() {
        var str = $('#connection option:selected').text();
        alert(str);
        $("#testme").text(str);
    }

    var $connectionSelect = $('#connection');
    //$connectionSelect.selectmenu(); // Tried enabling/disabling

    // Tried this and all JS code inside and outside of $(document).ready(...)
    $.when(
    $.ajax({
        dataType: "JSON",
        url: '@Url.Content("~/API/ConnectionHint")', // The AJAX call (using ASP Razor) works fine
        success: function(data) {
            // This function is always called and works
            var items = [];
            $.each(data, function(key, val) {
                items.push("<option value='" + key + "'>" + val + "</option>");
            });
            $connectionSelect.append(items.join(""));
            // Tried setting up the event handler here
        },
        error: function() {
            $connectionSelect.html('<option id="-1">none available</option>');
        }
    })
    ).then(function() {
        //$("#connection option").blur(connectionSelected()).change();
        $("#connection").on("change", connectionSelected());
    });
});

尝试了数十种事件处理程序,几个事件,deferred.done 和 deferred.then 的内部和外部等。例如:

$connectionSelect.selectmenu({
    change: function (event, data) {
        $('#connection').change(function () {
            var str = "";
            $('#connection').each(function () {
                str += $(this).text() + "<br>";
            });
            $("#testme").text(str);
        });
    }
});

我通常编写后端代码并且只熟悉 JQuery 的一部分,这让我发疯。我在 SO 和其他地方查看了 30 多个相关问题,例如

感谢任何想法。

【问题讨论】:

    标签: javascript jquery asp.net-mvc-5 jquery-events


    【解决方案1】:

    代替

    $("#connection").on("change", connectionSelected());
    

    试试

    $("#connection").on("change", connectionSelected);
    

    请注意,在第二个中,我通过引用传递您的函数处理程序,而不是调用它。

    【讨论】:

    • No. Way. 修复了它。有趣的是,() 是我在“尝试随机废话”故障排除阶段的十几个变体之一,但缺少无关的() 的变体有一个单独的、不相关的问题,我显然同时修复了.不知道该笑还是该哭。谢谢!
    • 您必须始终在 JavaScript 中通过引用传递回调函数。请记住这一点:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多