Javascript ASP.Net用户控件中的冲突JQuery函数

Javascript ASP.Net用户控件中的冲突JQuery函数,javascript,jquery,asp.net,user-controls,Javascript,Jquery,Asp.net,User Controls,我有一个名为MyControl的用户控件 并且在页面中使用了3次。因此,页面上有3个控件 我在使用ServerControl的控件中编写了jquery函数,例如 function MyFunction(myName) { //some Ajax Call $("#<%= MyTextBox1.ClientID").val(DataFromAjax); } 这就是我将其绑定到超链接控件的方式 if (!IsPostBack) { h

我有一个名为MyControl的用户控件

并且在页面中使用了3次。因此,页面上有3个控件

我在使用ServerControl的控件中编写了jquery函数,例如

function MyFunction(myName) {
    //some Ajax Call

    $("#<%= MyTextBox1.ClientID").val(DataFromAjax);
}
这就是我将其绑定到超链接控件的方式

if (!IsPostBack)
        {
            hlFill.Attributes.Add("onclick", string.Format("GetData('{0}'); return false;", GlobalSettings.UserADAccount));
}

为什么不添加一个参数来定义从何处调用函数呢?

如果绝对不能移动函数,那么类似于:

if (!MyFunction) {
   MyFunction = function(myName) {
       //some Ajax Call

       $("#<%= MyTextBox1.ClientID").val(DataFromAjax);
   }
}
if(!MyFunction){
MyFunction=函数(myName){
//一些Ajax调用
$(“#当您调用“MyFunction”时,您希望实现什么?我的意思是,当您试图调用它时,页面上三个控件中的每个javascript函数都会并发执行,以便从Ajax回调在每个控件中填充值

或者,您是否试图基于某些约束在每个控件中调用特定函数

每种情况都有不同的答案。例如,在第一种情况下,这纯粹是理论上的,但当您声明MyFunction时,您能否继续构建单个函数,例如:

if(MyFunction != null)
{
    var oldFunction = MyFunction;
    MyFunction = new function(){ //new code here; oldFunction(); }

}
else
{
    //Create it as you were but assign it to MyFunctino
}
如果是后者,您希望根据特定约束调用每个MyFunction,那么您是否可以,例如,获取Asp控件id并将其附加到函数名,这样您就可以创建一个唯一的函数,但我不确定您如何调用它,这样可能会有帮助,也可能没有帮助

编辑:

我现在对你的问题有了更多的了解。我现在假设你点击的三个控件中的哪一个总是执行它找到的第一个,所以它只是将数据重新加载到第一个控件中

您的问题的关键有两个方面:

  • 控件输出到页面的函数名之间没有区别
  • 在ajax回调成功时,控件值在函数中的设置我假设引用页面上的多个html控件
从您发布的JQuery函数中,我看不出每次都需要将此粘贴到控件中的确切原因,因为我没有看到任何服务器端变量输出

我的建议是在父页面中创建一个所有控件都使用的函数。由于服务器端变量的原因,您明确声明不能使用该函数,但如果是这种情况,请修改GetData()函数接受更多参数,以便这些参数定义它应该在其中运行的上下文,而不是从哪个控件输出

可能会将controlid作为参数传递给jquery函数,jquery函数也可以使用它作为另一个选择器来查找相关html控件,以填充回调上的值


多次输出函数会引发“我做得对吗?”的问题,而不是“我如何才能让它工作?”。

如何将脚本添加到控件?我建议使用。您可以提供一个脚本键,以便只将其添加到页面中一次

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
  String cstext1 = "alert('Hello World');";
  cs.RegisterStartupScript(cstype, csname1, cstext1, true);
}

你是如何调用这个函数的?你能发布你的3个控件输出的HTML吗?从它的声音来看,每个控件都有相同的ID,这就是为什么你会遇到这个问题。解释得很好。你是对的!!!我在关注“我如何才能让它工作?”而不是“我做得对吗?”?“.你给了我更好更正确的方法.非常感谢。
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
  String cstext1 = "alert('Hello World');";
  cs.RegisterStartupScript(cstype, csname1, cstext1, true);
}