Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript bind仅适用于第一个控件_Javascript_C#_Jquery_Asp.net_User Interface - Fatal编程技术网

Javascript bind仅适用于第一个控件

Javascript bind仅适用于第一个控件,javascript,c#,jquery,asp.net,user-interface,Javascript,C#,Jquery,Asp.net,User Interface,我在这里读过类似标题的问题,但他们所经历的行为并不完全相同。请不要链接到类似的问题,如果你仔细阅读,这个问题会有微妙的不同 我有这些动态创建的控件。他们没有硬编码的身份证 对于这些控件中的每一个,我希望在值更改时触发脚本控件都是下拉列表。这是我加载页面时的代码: foreach (string param in hasDependencies.Keys) { ScriptManager.RegisterStartupScript(this, GetType(), "onChange",

我在这里读过类似标题的问题,但他们所经历的行为并不完全相同。请不要链接到类似的问题,如果你仔细阅读,这个问题会有微妙的不同

我有这些动态创建的控件。他们没有硬编码的身份证

对于这些控件中的每一个,我希望在值更改时触发脚本控件都是下拉列表。这是我加载页面时的代码:

foreach (string param in hasDependencies.Keys)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}

进入该循环的第一个控件工作正常。如果我更改下拉列表的值,脚本将按预期每次执行。无论哪个控件首先进入这个循环,每次我更改它的下拉值时,脚本都会触发并完美执行

但是,其他控件不会触发脚本。当我更改其他下拉列表的值时,脚本根本不会执行,它们甚至不会尝试执行脚本

当我调试时,我可以看到每个控件实际上都进入这个循环,我可以判断它是控件的正确ID,但不管第一个控件绑定了什么,其他控件没有绑定我还尝试了“打开”和“更改”而不是“绑定”,没有区别。

我相信人们会希望看到脚本本身,但是问题可以隔离到C代码。JS控制台中没有什么值得一看的东西,开发人员工具页面上的标记下也没有值得一看的东西,只是一堆硬编码的敏感无关信息,我显然无法共享。这个问题可以隔离到C#代码中,因为即使我用非常简单的东西(例如,一个简单的警报)替换dynamicScript,它也只适用于第一个控件

添加此作为回答(澄清我的评论),因为将其放入评论中会很困难。如果它不能解决问题,请告诉我,我会删除它

此代码:

foreach (string param in hasDependencies.Keys)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
此部分添加的是事件侦听器(侦听更改并执行某些操作),而不是函数调用(在更改时执行某些操作):

应该是

foreach (string param in hasDependencies.Keys)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "onChange", dynamicScript, true);
}

这样它就可以在更改时运行动态脚本,而不只是添加另一个更改事件侦听器

这有意义吗


在旁注中为了将来的参考,编写这样的代码$(“#MainContent_JenkinsField_[redact]”)可能会让试图提供帮助的人进一步混淆您的问题,因为
[]
可能是jQuery选择器的一部分。如果按字面理解,该选择器将查找ID为
MainContent\u JenkinsField\u
的元素,该元素具有名为
redact
的属性。我希望括号只是为了显示删除参数的位置,而真正的选择器是这样的:
$('MainContent\u JenkinsField\u yourpram')
问题是:

foreach (string param in hasDependencies.Keys)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
RegisterStartupScript接受5个参数,第3个参数是键。对于我试图绑定的每个事件侦听器,每次我都将键设置为“onChange”。密钥必须是唯一的

foreach (string param in hasDependencies.Keys)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "onChange" + param, "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
我变了

“onChange”

“onChange”+参数


已修复。

我是否理解您正在创建具有相同ID的多个控件?还是将此
[redact]
完全替换为字符串,而不是像属性选择器一样使用?另外,如果我读对了,您的
onChange
函数正在添加一个
onChange
事件处理程序,而不是一个它应该调用的函数
onChange
您能显示在客户端呈现的输出HTML/JS吗?“进入此循环的第一个控件工作得很好…”。。。我猜您为所有控件分配了相同的ID,但这不起作用(无效html)--它只在第一个控件上起作用。@Ted,所有控件都有不同的名称/ID,显然没有具有相同ID的控件。@Ted,我应该补充一点,我认为脚本没有问题,它在启动时执行并成功完成,它只是没有被其他控件触发。我只是添加了它,因为我认为如果没有提供,人们会抱怨。我不确定我是否理解“添加onChange事件处理程序”和“它应该调用onChange的函数”之间的区别。我可以看出这是多么令人困惑!是的,您最后的假设是正确的,[redact]表示我正在审查参数名称。在昨天之前,我甚至从未见过jQuery,我没有意识到它是模棱两可的。其目的是添加一个事件侦听器,因此它的方式是正确的。唯一的问题是,我为每个事件侦听器分配了相同的键(“onChange”)。问题解决了!
foreach (string param in hasDependencies.Keys)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "onChange", "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}
foreach (string param in hasDependencies.Keys)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "onChange" + param, "$('#MainContent_JenkinsField_" + param + "').on('change', function(){" + dynamicScript + "});", true);
}