один и тот же JavaScript для нескольких экземпляров пользовательского контроля не работает - PullRequest
5 голосов
/ 24 марта 2012

Я использую пользовательский элемент управления на моем веб-сайте, который выполняет функцию автозаполнения текстового поля. Я использовал javascript для событий клиента keydown и onfocus. Это код javascript

<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();
        }
    }
}

Когда я использую один экземпляр этого элемента управления на моей странице aspx, он работает нормально, но когда я использую более одного экземпляра на моей странице aspx, javascript всех элементов управления перезаписывается последним экземпляром элемента управления на моей странице и никаких других контрольных работ.

Плз, если у кого-то есть решение моей проблемы, чем, пожалуйста, скажите мне ..

Я уже погуглил и не нашел решения.

Пожалуйста, помогите мне. Это срочно для меня.

Любая помощь приветствуется. Заранее спасибо ....

Ответы [ 3 ]

5 голосов
/ 25 марта 2012

Вот как я справлялся с подобными проблемами в прошлом ...

Блок, подобный этому, помещается во внешний файл js, указанный в элементе управления ascx.

    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>

А затем на странице, включая пользовательский элемент управления:

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

Идея состоит в том, что у вас есть базовый класс с необходимой вам функциональностью, который используется всеми экземплярами пользовательского элемента управления. Затем производный класс для каждого экземпляра пользовательского элемента управления с новым конструктором, устанавливающим свойства для всей конкретной для экземпляра даты (т. Е. Идентификаторов элементов управления, составляющих пользовательский элемент управления). Базовый класс ссылается на эти свойства. Производный класс именуется с помощью ClientID пользовательского элемента управления, что делает его уникальным на странице.

У меня нет доступа к банкомату asp.net, поэтому, возможно, здесь есть ошибки ...

3 голосов
/ 24 марта 2012

Во-первых, я бы определил ваши функции javascript в одном месте, возможно, на родительской странице или даже в файле с глобальными ссылками.Таким образом, вы не будете использовать одни и те же функции снова и снова, когда вы используете несколько экземпляров своего пользовательского элемента управления на одной странице.

Тогда вместо того, чтобы встраивать идентификаторы клиентов ваших элементов управления pnlSearch и txtSearch в функции JavaScript, я бы рекомендовал передавать их в функции при каждом их вызове.

То, как вы настроили функции JavaScript в последнем экземпляре вашего отображаемого пользовательского элемента управления, будет вызываться каждый раз, что вызовет функции в ранее отрисованных экземплярах пользовательского элемента управления.быть проигнорированным.

1 голос
/ 06 мая 2013

Может помочь статья в следующей ссылке: http://simpledotnetsolutions.wordpress.com/2011/07/03/multiple-usercontrol-instances-in-a-page-and-jquery/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...