Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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不工作_Javascript_Asp.net_User Controls - Fatal编程技术网

多个用户控件实例的相同JavaScript不工作

多个用户控件实例的相同JavaScript不工作,javascript,asp.net,user-controls,Javascript,Asp.net,User Controls,我在我的网站上使用一个用户控件,它执行自动完成文本框的功能。我已经将JavaScript用于keydown和onfocus客户端事件。代码如下: <script language="JavaScript" type="text/javascript"> function TriggeredKey(e) { var keycode; if (window.event) keycode = window.event.keyCode; if (keycode ==

我在我的网站上使用一个用户控件,它执行自动完成文本框的功能。我已经将JavaScript用于keydown和onfocus客户端事件。代码如下:

<script language="JavaScript" type="text/javascript">
function TriggeredKey(e) {
    var keycode;
    if (window.event) keycode = window.event.keyCode;
    if (keycode == 9) {
        document.getElementById("<%=pnlSearch.ClientID %>").style.visibility = 'hidden';
        document.getElementById("<%=pnlSearch.ClientID %>").style.display = 'none';
    }
    else {
        document.getElementById("<%=hdfkey.ClientID %>").value = keycode;
    }
    _dopostback();
}


function pasteIntoInput(el) {
    var text = document.getElementById("<%=txtSearch.ClientID %>").value;
    if (typeof text != "undefined" && text != "") {
        el.focus();
        el.value = el.value;
        if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
            var val = el.value;
            var selStart = el.selectionStart;
            el.value = val.slice(0, selStart) + val.slice(el.selectionEnd);
            el.selectionEnd = el.selectionStart = selStart + text.length;
        }
        else if (typeof document.selection != "undefined") {
            el.focus();
        }
    }
}

函数TriggeredKey(e){
var键码;
如果(window.event)keycode=window.event.keycode;
if(keycode==9){
document.getElementById(“”).style.visibility='hidden';
document.getElementById(“”).style.display='none';
}
否则{
document.getElementById(“”).value=keycode;
}
_dopostback();
}
功能输入(el){
var text=document.getElementById(“”)值;
如果(文本类型!=“未定义”&&text!=“未定义”){
el.focus();
el.value=el.value;
if(el.selectionStart的类型=“number”&&type el.selectionEnd==“number”){
var val=el.value;
var selStart=el.selectionStart;
el.value=val.slice(0,selStart)+val.slice(el.selectionEnd);
el.selectionEnd=el.selectionStart=selStart+text.length;
}
else if(typeof document.selection!=“未定义”){
el.focus();
}
}
}


当我在我的aspx页面中使用此控件的单个实例时,它可以正常工作,但当我在我的aspx页面中使用多个实例时,所有控件的JavaScript都会被我页面中控件的最后一个实例覆盖,其他控件都不会工作。

首先,我会在一个位置定义JavaScript函数,可能是父页面,甚至是全局引用的文件。这样,当您在一个页面上使用多个用户控件实例时,就不会反复呈现相同的函数

然后,我建议不要将pnlSearch和txtSearch控件的客户端ID嵌入JavaScript函数,而是在调用它们时将它们传递到函数中


在呈现的用户控件的最后一个实例上设置JavaScript函数的方式将是每次调用的方式,这将导致忽略先前呈现的用户控件实例中的函数。

以下是我过去处理此类问题的方式

这样的块放入控件ascx中引用的外部js文件中

    function UserControl() {
    }

    UserControl.prototype = {       
        DoStuff : function() {
                var x = this.clientID; 
                window.alert(this.pnlSearchClientID);
            },
        TriggeredKey : function(e) {
                var keycode;
                if (window.event) keycode = window.event.keyCode;
                if (keycode == 9) {
                    document.getElementById(this.pnlSearchClientID).style.visibility = 'hidden';
                    document.getElementById(this.pnlSearchClientID).style.display = 'none';
                }
                _dopostback();
            },
        pasteIntoInput : function() {
            var text = document.getElementById(this.txtSearchClientID).value;
        }
    };
类似这样的块出现在ascx文件中:

<script type="text/javascript">
    function UserControl<%=this.ClientID%>() {
        this.pnlSearchClientID = <%=pnlSearch.ClientID%>;
        this.txtSearchClientID = <%=txtSearch.ClientID%>;
    }
    UserControl<%=this.ClientID%> = UserControl.prototype;

</script>

函数UserControl(){
this.pnlSearchClientID=;
this.txtSearchClientID=;
}
UserControl=UserControl.prototype;
然后在包含用户控件的页面中:

<script type="text/javascript">
    var inst1 = new UserControl<%=instance.ClientID %>();  
    inst1.DoStuff();
</script>

var inst1=new UserControl();
inst1.DoStuff();
其思想是,您有一个具有所需功能的基类,在用户控件的所有实例中共享。然后,为用户控件的每个实例创建一个派生类,并使用一个新的构造函数设置所有实例特定日期的属性(即构成用户控件的控件的ID)。基类引用这些属性。派生类使用用户控件的ClientID命名,使其在页面上唯一


我没有访问asp.net ATM的权限,所以这里可能有错误

谢谢你的邀请。。但是请告诉我,当我必须调用父页面javascript代码时,您可以将对页面javascript中所需内容的引用传递给用户控件javascript对象-在用户控件javascript对象中设置属性,将某些内容传递给构造函数,将参数传递给用户控件javascript对象上定义的方法。如果为父页面定义了类似类型的javascript对象,则可以在实例化该对象时将其传递给用户控件。。。有很多选择。我试着遵循上面的方法,但没有成功。有人能帮我吗:谢谢你的rply。。。我的javascript现在可以正常工作了。但也有一些问题。1) 我正在将pnlsearch id传递给函数,但根据我在tab press上的代码,面板应该隐藏,但它现在不工作。2) 我在usercontrol中使用了AJAX PopupControl。在多个实例中,PopupControl之间也存在冲突。请告诉我如何解决这些问题。非常感谢您的帮助Hey raina,我很乐意,您可以发布更新的代码以及包含AJAX PopupControl的usercontrol示例吗?