Почему событие onbox textbox не срабатывает правильно в пользовательском элементе управления asp.net? - PullRequest
1 голос
/ 16 февраля 2012

У меня есть 2 текстовых поля, для которых я пытаюсь захватить событие onchange.Эти текстовые поля находятся в пользовательском элементе управления, который находится на панели обновления asp.net.Каждый раз, когда я изменяю текст в текстовом поле, я получаю сообщение об ошибке «Ошибка выполнения Microsoft JScript: ожидается объект», которая не предоставляет никакой другой полезной информации.

Вот код:

    <script type="text/javascript">
        function ResetOrientationImage() {
            var width = (+document.getElementById('<%= txtWidth.ClientID %>').value);
            var height = (+document.getElementById('<%= txtHeight.ClientID %>').value);
            if (width > height) {
                document.getElementById('<%= imgOrientation.ClientID %>').src = "images/buttons/Landscape.png";
            } else {
                document.getElementById('<%= imgOrientation.ClientID %>').src = "images/buttons/Portrait.png";
            }
        }
</script>
<asp:TextBox ID="txtWidth" runat="server" Width="50px" onchange="ResetOrientationImage()" Text="0"></asp:TextBox>
<asp:TextBox ID="txtHeight" runat="server" Width="50px" onchange="ResetOrientationImage()" Text="0"></asp:TextBox>
<asp:Image ID="imgOrientation" ImageUrl="~/images/buttons/Portrait.png" runat="server" />

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

РЕДАКТИРОВАТЬ После просмотра в Firebug,настоящая ошибка заключается в том, что функция ResetOrientationImage не может быть найдена при выполнении страницы.Если я перенесу javascript из пользовательского элемента управления на саму страницу, он будет работать так, как я и ожидал.Почему javascript не может жить в пользовательском элементе управления?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Несколько вещей здесь:

var width = (+document.getElementById('<%= txtWidth.ClientID %>').value);
var height = (+document.getElementById('<%= txtHeight.ClientID %>').value);

«+» в начале до «document» недействителен.

width и height будут строками.Вам нужно сделать их целыми числами:

var width = parseInt(document.getElementById('<%= txtWidth.ClientID %>').value);

Также - пожалуйста, как ваш HTML вывод , а не ваш .NET источник .Проблема на клиенте, а не на сервере.

0 голосов
/ 17 февраля 2012

Я наткнулся на этот вопрос, который дал мне мой ответ:

Объект JavaScript не определен после ScriptManager.RegisterClientScriptInclude

Я переместил свою функцию JavaScript ввнешний файл и ссылается на него в коде пользовательского элемента управления следующим образом:

    ScriptManager sm = ScriptManager.GetCurrent(Page);
    ScriptReference sr = new ScriptReference("~/scripts/ResetOrientationImage.js");
    if (!sm.Scripts.Contains(sr))
       sm.Scripts.Add(sr);
...