jquery val () в текстовом поле не устанавливает атрибут значения DOM

#c# #javascript #jquery #.net #asp.net

#c# #javascript #jquery #.net #asp.net

Вопрос:

Я столкнулся со странной проблемой и не уверен, является ли причиной этого jquery или комбинация моего сценария. Когда я устанавливаю значение текстового поля с помощью jquery, текстовое поле отображает правильное значение, но атрибут value внутри html остается тем, с которым он был загружен. Почему он отображает другой текст, чем тот, что в DOM?

У меня есть динамически сгенерированная форма, которая добавляет два числа и отображает добавление в третье текстовое поле с помощью jquery, как показано ниже. Вы можете воспроизвести, используя приведенный ниже код

Файл конструктора

 <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<script src="../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {

        $(".addToTotal").blur(function () {
            UpdateTotal();
        });
    });

    function UpdateTotal() {

        var add = 0;
        $(".addToTotal").each(function () {
            add  = Number($(this).val());
        });
        $(".txtTotalPoints").val(add.toFixed(2));
        $("#para").text("Sum of all textboxes is : "   add);
    }

</script>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
<input id="addAll" type="button" value="Sum all Textboxes" /><br />
<p id="para"> </p>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
  

Код за файлом, который динамически добавляет управление, является

         protected void Page_Init(object sender, EventArgs e)
    {
        TextBox txt1 = new TextBox();
        txt1.ID = "txt1";
        txt1.CssClass = "addToTotal";

        TextBox txt2 = new TextBox();
        txt2.ID = "txt2";
        txt2.CssClass = "addToTotal";

        TextBox txt3 = new TextBox();
        txt3.ID = "txt3";
        txt3.CssClass = "txtTotalPoints";

        PlaceHolder1.Controls.Add(txt1);
        PlaceHolder1.Controls.Add(txt2);
        PlaceHolder1.Controls.Add(txt3);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            UpdateTextBoxTextProperty(this);
        }
    }

    private void UpdateTextBoxTextProperty(Control parent)
    {
        foreach (Control c in parent.Controls)
        {
            if (c is TextBox)
            {
                string Id = c.ID;
                string fieldName = Id.Substring(3);
                (c as TextBox).Text = fieldName;
            }

            if (c.Controls.Count > 0)
            {
                UpdateTextBoxTextProperty(c);
            }
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {

    }
  

Ответ №1:

вы также можете использовать

 $(selector).attr("value","Hello World.");
  

Ответ №2:

вот что должно произойти: dom является динамическим, но когда вы просматриваете исходный код страницы, браузер показывает исходный html. (конечно, это зависит от того, какой браузер вы используете, каждый браузер индивидуален)

Комментарии:

1. это происходит как с Chrome, так и с FF. Я еще не пробовал это в IE. Я не очень разбираюсь в javascript в целом, но я подумал, что jquery также должен обновить атрибут value = «». Я что-нибудь упускаю? Что мне следует сделать, чтобы обновить и это значение dom

2. измененное значение сохраняется в памяти и будет отправлено на сервер при отправке формы (и / или возвращено при проверке с помощью javascript) — браузер просто показывает исходное значение, загруженное с сервера, но беспокоиться не о чем. если вы хотите, чтобы это значение отображалось по-другому при просмотре исходного кода, вам нужно будет отправить другое значение с сервера (но вам не нужно этого делать, это не дает особой выгоды)

3. круто, значит, это поведение по умолчанию, я прав? Но когда я получаю текстовое значение текстового поля из кода после обратной передачи, оно по-прежнему показывает исходное значение, а не обновленное значение. Поэтому я подумал, что браузеру следует обновить его. В любом случае спасибо за вашу помощь, и я разберусь, где в коде моего оригинального проекта проблема