JQuery .bind只适用于第一个控件
JQuery .bind only works for the first control
我在这里读过类似标题的问题,但他们所经历的行为并不完全相同。请不要链接到类似的问题,如果你仔细阅读,这个问题会有微妙的不同。
我有这些动态创建的控件。他们没有硬编码的id。
对于这些控件中的每一个,我希望在值被更改时触发一个脚本。控件都是下拉菜单。这是我的代码隐藏当页面加载:
foreach (string param in hasDependencies.Keys)
{
ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
进入这个循环的第一个控件工作得很好。如果我更改下拉列表的值,脚本每次都会按预期执行。无论哪个控件先进入这个循环,每次我改变它的下拉列表值,脚本都会触发并完美执行。
但是,其他控件不触发脚本。当我改变其他下拉菜单的值时,脚本根本不会执行,它们甚至不会尝试执行脚本。
当我调试时,我可以看到每个控件实际上都进入了这个循环,并且我可以告诉它是该控件的正确ID,但无论第一个控件绑定了什么,而其他控件没有绑定。我还尝试了"on"answers"change"而不是"bind",没有区别。
我相信人们会想要看到脚本本身,但是问题可以被隔离到c#代码。在JS控制台上没有任何东西,在开发人员工具的页面标记下也没有任何值得看到的东西,只有一堆硬编码的敏感无关信息,我显然不能分享。这个问题可以与c#代码隔离,因为即使我用一些非常简单的东西(例如,一个简单的警报)替换dynamicScript,它也只适用于第一个控件。
添加这个作为答案(澄清我的评论),因为把它放在评论中会很困难。如果不能解决问题,请告诉我,我将删除它。
这个代码:foreach (string param in hasDependencies.Keys)
{
ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
这部分是添加一个事件侦听器(侦听更改并执行某些操作),而不是函数调用(在更改时执行某些操作):
"$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});"
应该是
foreach (string param in hasDependencies.Keys)
{
ScriptManager.RegisterStartupScript(this, GetType(), "onChange", dynamicScript, true);
}
或
foreach (string param in hasDependencies.Keys)
{
ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "function(){"+dynamicScript+"}", true);
}
以便在更改时运行动态脚本,而不是仅仅添加另一个更改事件侦听器。
明白了吗?
在一个旁注为将来的参考,写这样的代码$('#MainContent_JenkinsField_[redacted]')
可能会混淆你的问题进一步的人试图帮助,因为[]
可以是jQuery选择器的一部分。如果从字面上理解,该选择器将查找ID为MainContent_JenkinsField_
的元素,该元素具有名为redacted
的属性。我希望括号只是为了显示您删除参数的位置,真正的选择器看起来像这样:$('#MainContent_JenkinsField_yourParam')
问题如下:
foreach (string param in hasDependencies.Keys)
{
ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
RegisterStartupScript有5个参数,第三个参数是key。对于我试图绑定的每个事件侦听器,我每次都将键设置为"onChange"。密钥必须是唯一的。
foreach (string param in hasDependencies.Keys)
{
ScriptManager.RegisterStartupScript(this, GetType(), "onChange" + param, "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
I changed
" onChange "
固定。"onChange" + param
- 使用相同javascript的多个控件
- 具有多个控件的数据视图
- 多个控件的javascript函数调用
- jQuery选择了多个控件
- java脚本中用于多个控件的单个onchange函数
- 尝试锁定自定义控件,但在页面中有多个控件时出现问题
- 挖空“with”绑定:每个属性到多个控件
- 如何从多个控件调用 JS 函数
- 使用多个控件筛选JSON数据数组
- ASP MVC将两个控件绑定到一个字段
- Javascript在onclick上验证两个控件,但如果只有一个控件验证,则不保留值
- 如何在同一位置设置多个控件
- 如何在单击链接按钮时隐藏文本框控件,其中这两个控件都是网格视图的子控件
- 根据复选框项显示或隐藏一个或多个控件
- 为多个控件注册一次事件处理程序-是否可能
- 在ASP.net Listview中获取多个控件id的值并将其传递给JavaScript
- 使用css下拉列表中的按钮和文本框等多个控件
- 传递多个控件到Javascript函数
- JQuery .bind只适用于第一个控件
- 在javascript函数的参数上传递多个控件