【问题标题】:jQuery .change() only fires oncejQuery .change() 只触发一次
【发布时间】:2012-11-01 13:37:52
【问题描述】:

我有一个名为“ddlCaseFiles”的 DropDownList。 然后我有一个我导入的脚本,其中包含用于捕获事件的 jQuery .change() 函数。然后我有 3 个对 dropDownList 进行排序的单选按钮。加载默认单选按钮时,将触发该事件。但只要我选择另一个单选按钮,事件就不会再触发了。

这是我的下拉列表:

<asp:DropDownList runat="server" ID="ddlCaseFiles" DataSourceID="dsMyCaseFiles" 
DataTextField="Display" DataValueField="FileID" OnPreRender="ddl_PreRender" />

这是我的 jQuery .change():

 $('#ddlCaseFiles').change(function () {
    debugger;
    $('#lblNextExhibitNumber').text('');
    var temp = $(this).val();
});

以下是单选按钮的作用:

    protected void rbByFileName_CheckedChanged(object sender, EventArgs e)
{
    ddlCaseFiles.DataSourceID = "dsCaseFilesReverse";
    ddlCaseFiles.DataTextField = "Display";
    ddlCaseFiles.DataValueField = "FileID";
}

protected void rbByFileID_CheckedChanged(object sender, EventArgs e)
{
    ddlCaseFiles.DataSourceID = "dsCaseFiles";
    ddlCaseFiles.DataTextField = "Display";
    ddlCaseFiles.DataValueField = "FileID";
}

我以前从未使用过 .change()。所以也许我错过了什么

【问题讨论】:

  • 尝试 onclick(或点击)事件。
  • 即使我只是单击下拉列表,它也不会捕获任何内容,因为它会触发。我正在尝试捕获 selectedValue。但是通过 jquery
  • 这不是因为你有作为 runat="server" 的 Dropdownlist 可以回发吗?
  • 这将导致错误,因为我需要将数据字段和值分配给下拉列表
  • 我认为您将其与下拉列表 ClientIDMode="Static" 一起使用,我认为这会对您有所帮助

标签: javascript jquery asp.net


【解决方案1】:

看起来单选按钮的 CheckedChanged 事件不会触发下拉更改事件。 JS change 事件在下拉列表的选定值更改时触发。当您更改 DataSourceID 时,这不一定会发生,是吗?

我不确定如何在 ASP 中触发它。也许ddlCaseFiles.SelectedIndexChanged()

否则,您可以向收音机添加点击事件处理程序:

$('input[type="radio"].someCssClass').click(function(){
   $('#ddlCaseFiles').trigger('change');
});

编辑:

这只是一个猜测,但看起来CheckedChanged 可能正在修改页面上的&lt;select&gt; 元素。例如,是否每次DataSourceID 更改时都会重新插入?

尝试使用.on() 函数更改您的下拉更改事件处理程序:

$('body').on('change', '#ddlCaseFiles', function () {
    debugger;
    $('#lblNextExhibitNumber').text('');
    var temp = $(this).val();
});

注意:为了获得更好的性能,请将$('body') 更改为更靠近下拉菜单的容器。

.change() 函数将change 处理程序附加到页面上的元素。如果 ASP 删除一个元素并稍后重新添加它,那么处理程序就消失了。

即使元素被删除,使用.on() 函数附加的处理程序仍然存在。 Read more here.

【讨论】:

  • 但不是每次我更改选择时都会触发 JS 事件吗?单选按钮仅更改文件 ID 的排序。我仍然需要从列表中选择一个
  • 啊,对。您可以发布 ASP 为无线电更改事件处理程序生成的 JS 吗?看起来 ASP 正在搞乱下拉菜单。
  • 我会看看并发布在主要问题中
  • 您的“EDIT:”代码似乎可以解决问题,即使在选择单选按钮后也能捕获值。现在来弄清楚为什么>。>我将发布生成的Js代码
  • 非常感谢您提供这些信息。这比我想象的更深入
【解决方案2】:

使用 jquery 3.6 的更现代的答案

    $(document).on('change', "#ddlCaseFiles", function (e) {
      debugger;
      $('#lblNextExhibitNumber').text('');
      var temp = $(this).val();
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多