Как изменить цвет фона $ (this) элемента текста, измененного без обратной передачи? - PullRequest
0 голосов
/ 24 июня 2019

Я не очень силен в JavaScript, так что простите за невежество.У меня есть веб-страница, где пользователи загружают файл .XLS / .CSV и просматривают его, прежде чем отправлять данные в нашу базу данных.Пользователи могут редактировать ячейки документа на нашем экране «просмотра», прежде чем нажать «Отправить».Однако, поскольку может быть более 150 строк, я хочу реализовать некоторые функциональные возможности на стороне клиента, которые изменяют цвет фона текстового поля, если пользователь вносит в него изменения.

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

<script type="text/javascript">
   function changeTextBoxColor() {
      $(this).style.backgroundColor = "red";
   }
</script>

Текстовые поля реализованы в <asp:Repeater>, поэтому я не могу реализовать оператор var v = document.getElementById(...) в своей функции.Пример текстового поля, которое я пытаюсь вызвать:

<td>
   <asp:TextBox ID="txtRGMNumber" CssClass="faded--input white full"
     OnChange="changeTextBoxColor()" runat="server" Text='<%# Eval("RGM Number") %>'>
  </asp:TextBox>
</td>

После редактирования текста в текстовом поле мне нужно, чтобы цвет фона поля был красным, БЕЗ обратных передач.

1 Ответ

0 голосов
/ 24 июня 2019

Это немного "хакерский", но чем больше я его убираю, тем менее очевидным становится то, что он делает:

<body>
    <form id="form1" runat="server">
        <table>
            <asp:Repeater runat="server" ID="MyRepeater">
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:TextBox runat="server" Text="Some value" 
                                CssClass="js-changeBackgroundColor" />
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>

        </table>
    </form>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script>
        $(".js-changeBackgroundColor").on("input", function () {
            this.style.backgroundColor = "green";
        });
    </script>
</body>

Сначала мы добавляем класс CSS - js-changeBackgroundColorк каждому из текстовых полей на стороне сервера.Поэтому, когда каждый из них отображается, он будет содержать этот атрибут:

class="js-changeBackgroundColor"

Использование класса CSS для «маркировки» элементов (вместо фактического применения стилей) может быть устаревшим.Скорее всего, вы можете сделать то же самое с другим атрибутом.Но префикс js- указывает, что класс предназначен для этой цели.(Префикс на самом деле ничего не делает - это просто соглашение, чтобы человек, читающий код, мог видеть разницу.)

Затем мы добавляем jQuery на страницу:

<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

Наконец, мы выполняем скрипт, который говорит, найти все элементы этого класса и добавить к ним обработчик событий.Когда вызывается событие «input», измените цвет фона на зеленый:

<script>
$(".js-changeBackgroundColor").on("input",
    function() {
        this.style.backgroundColor = "green";
    });
</script>

Это вряд ли отполировано, но вы можете увидеть это как введение в то, как смешивать код на стороне сервера и на стороне клиентабез того, чтобы они наступали друг на друга.

Хотя они все еще немного наступают друг на друга.Код на стороне сервера не «знает», что код на стороне клиента изменил цвет фона.Поэтому, если вы выполните обратную передачу, цвет фона вернется к тому, что был.

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