Gerry47 Ответов: 2

Обновить текстовое поле по индексу измененному в выпадающем списке не работает


Я пытаюсь использовать JavaScript для обновления значения в текстовом поле при изменении выбранного значения выпадающего списка. Есть много постов об этом, и ни один из них не сработал для меня. Значит, я что - то упускаю.

Вот тут-то и появляется выпадающий список.
<div runat="server" id="DivNoOfFlights" style="white-space: nowrap; height: 34px;">
<asp:Label CssClass="pcnt51left" ID="Label22" runat="server" Text="Number Of Flights"></asp:Label>
<asp:DropDownList CssClass="pcnt20right" Style="text-align: right;" ID="ddl_NoOfFlights" runat="server" onclick="myFunction()"></asp:DropDownList>
</div>

Это текстовое поле.
<div runat="server" id="DivGenPlty1" style="white-space: nowrap; height: 34px;">
<asp:Label CssClass="pcnt51left" ID="lblGenPlty1" runat="server" Text="General Penalty"></asp:Label>
<asp:TextBox CssClass="pcnt20right" ID="GenPlty1" runat="server"></asp:TextBox>
</div>


А вот и JavaScript.
<script type="text/javascript">

      function myFunction()
      {
          var ddl = document.getElementById("<%=ddl_NoOfFlights.ClientID%>");
          var Value = ddl.options[ddl.selectedIndex].value;
          var txtbx = document.getElementById("<%=GenPlty1.ClientID %>");
          if (Value == 0) { txtbx.text = "0"; }
          if (Value == 1) { txtbx.text = "0"; }
          if (Value == 2) { txtbx.text = "10"; }
          if (Value == 3) { txtbx.text = "20"; }
      }

  </script>

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

Что я уже пробовал:

Несколько дней искал в интернете сообщения о подобной проблеме. Они помогли мне добраться до этого места, но не переступили черту.

0x01AA

Понятия не имею, но есть "runat="сервер" onclick="myFunction()" против Javascript не что-то противоположное?

2 Ответов

Рейтинг:
9

Gerry47

Большое спасибо F-ES Sitecore за то, что нашли время ответить на этот вопрос.
Я сделал именно то, что вы предлагали, и это сразу сработало.
Единственное, что мне пришлось изменить, - это событие dropdownlist с "onclick" на "onchange". После этого он теперь работает именно так, как я и предполагал.
Я никогда бы не подумал, что нацеливание на свойство "текст" вместо "значение" может быть проблемой.

Обновление 2020.07.09
Обдумав этот вопрос в течение некоторого времени, я рационализировал то, что здесь происходит.
Я не эксперт в этом, но это именно то, как я это вижу.

Когда asp:textbox визуализируется браузером, он визуализируется как элемент ввода HTML типа text следующим образом

<input type="text" ...../>

Этот элемент имеет свойство под названием "value", и JavaScript может его обновить.
Изменение можно увидеть на экране.

Но, похоже, JavaScript не может обновить свойство "text" asp:textbox.

Таким образом, хотя то, что мы видим на экране, изменилось, текстовое свойство asp:textbox не изменилось.

И именно поэтому новое значение на экране не отправляется обратно на сервер.

Решение состоит в том, чтобы заменить asp:textbox элементом ввода HTML типа 'text'. Затем работает обновление экрана и обратная передача значения также работает.

Было бы идеально, если бы JavaScript мог напрямую обновлять свойство text asp:textbox.

Если кто-то знает, как это сделать, я уверен, что многие люди хотели бы знать.


Рейтинг:
14

F-ES Sitecore

Я погуглил "обновить текстовое поле с помощью javascript", и первый результат был

текстовое поле - как обновить введите текст с помощью JavaScript? - переполнение стека[^]

сравнивать этот;

document.getElementById('txtField').value='new value here'


к тому, что у тебя есть

txtbx.text = "0";


вы устанавливаете "значение", а не "текст", поэтому измените свой код следующим образом

function myFunction()
{
    var ddl = document.getElementById("<%=ddl_NoOfFlights.ClientID%>");
    var Value = ddl.options[ddl.selectedIndex].value;
    var txtbx = document.getElementById("<%=GenPlty1.ClientID %>");
    if (Value == 0) { txtbx.value = "0"; }
    if (Value == 1) { txtbx.value = "0"; }
    if (Value == 2) { txtbx.value = "10"; }
    if (Value == 3) { txtbx.value = "20"; }
}


0x01AA

Пожалуйста, помогите нубу для большего понимания этого веб-материала: но разве "runat="server" не кусает выполнение Javascript браузера? Заранее Вам большое спасибо.

F-ES Sitecore

Нет, но если есть событие на стороне сервера, такое как "OnClick", и вы хотите использовать событие на стороне клиента для запуска js, то обычно существует другое свойство для установки, например OnClientClick. Это касается кнопок, хотя на стороне сервера нет события onclick для выпадающего списка, поэтому установка onclick="..." просто отображает его как обычный атрибут html.

0x01AA

Большое спасибо.