javascript - jQuery 事件触发一次,然后再也不会

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

几个小时以来,我一直在努力研究一个简单的 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 多个相关问题,例如

欢迎任何想法。

最佳答案

代替

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

尝试

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

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

关于javascript - jQuery 事件触发一次,然后再也不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307212/

相关文章:

css - 如何更改 MVC 5 @Html.EditorFor 宽度

javascript - 如何通过 jQuery 获取 P 元素直到下一个 H2 元素?

javascript - react : Unable to update children props

javascript - 如何设置打印到控制台的单个单词的字体颜色

javascript - 使用 TamperMonkey 进行页面重新加载无限循环

jquery - 打开菜单后 Bootstrap 4 插入符号方向发生变化

javascript - JS : Fail to obtain object after change of filter

c# - ASP NET Web API 中的路由 - 对于不同版本的 API

c# - 调用 Controller 操作 MVC5

java - 如何像从浏览器栏中一样以编程方式执行 javascript?