0

$(document).ready()中,我正在设置要选择的特定下拉列表的第一个元素。我还需要在下拉菜单上触发更改功能,就像手动选择该选项一样。如果触发了更改,showTestsByPanel则调用该函数并显示与所选下拉选项相关的适当数据。

我正在执行以下操作,但它无助于触发更改功能:

$(document).ready(function () {
    $("#lbpanel option:first-child").attr('selected', 'selected');
    $('#lbpanel').trigger('change'); // <-- this is not triggering the change

    $('#lbpanel').change(function () {
        var $this = $(this);
        var parentId = $("#lbpanel").find("option:selected").val();
        $("#selectedTests tr").each(function () {
            showTestsByPanel(parentId, $(this));
        });
    });
});

我也尝试过$('#lbpanel').change(),但效果不佳。

如果有帮助:

  • 整个事情都在一个模态对话框中。
  • 这实际上是一个allowmultiple设置为 false 的列表框。

我究竟做错了什么?

4

2 回答 2

1

您试图change在创建处理程序之前触发事件。这就是为什么没有效果。

所以调用change()注册后的change事件处理程序

$(document).ready(function () {
    $("#lbpanel option:first-child").attr('selected', true);
    $('#lbpanel').change(function () {
        var $this = $(this);
        var parentId = $("#lbpanel").find("option:selected").val();
        $("#selectedTests tr").each(function () {
            showTestsByPanel(parentId, $(this));
        });
    }).change(); //added change here
});
于 2013-10-27T11:26:19.920 回答
1

您需要在注册触发器处理程序后触发更改事件,当触发事件时,它将仅调用那些已注册的处理程序。

$(document).ready(function () {
    $("#lbpanel option:first-child").attr('selected', 'selected');

    $('#lbpanel').change(function () {
        var $this = $(this);
        var parentId = $("#lbpanel").find("option:selected").val();
        $("#selectedTests tr").each(function () {
            showTestsByPanel(parentId, $(this));
        });
    }).trigger('change'); // need to trigger the event after the handler is added
});
于 2013-10-27T11:26:27.537 回答