Почему текстовое поле теряет маскировку при обратной передаче?

Я задавал этот вопрос много раз через разные промежутки времени на разных форумах, но ничто не помогло мне, но я надеюсь, что выложу его снова. Пожалуйста помоги.

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

jQuery(function ($) {

     $("#txtBoxComplainantCNIC").mask("99999-9999999-9", { placeholder: "" });
        });

текстовое окно:

 <asp:TextBox ID="txtBoxComplainantCNIC" runat="server" onkeypress="return isNumberKeyCNIC(this)" ClientIDMode="Static" placeholder="XXXXX-XXXXXXX-X" MaxLength="15" CssClass="form-control"></asp:TextBox>

Текстовое поле находится в UpdatePanel.

2 ответа

Похоже, ваша проблема в том, что вы зарегистрировали функцию в JQuery для выполнения при загрузке страницы. Что это

jQuery(function ($) {
  $("#txtBoxComplainantCNIC").mask("99999-9999999-9", { placeholder: "" });
});

делает. Однако это означает, что код будет выполняться только при загрузке страницы. Ваша проблема в том, что в UpdatePanelобратная передача происходит асинхронно (без загрузки страницы), поэтому ваша функция не запускается второй раз, а ваш TextBox теряет свою маску.

Что вы, вероятно, хотите сделать, это зарегистрировать эту часть вашего скрипта

$("#txtBoxComplainantCNIC").mask("99999-9999999-9", { placeholder: "" });

в коде позади, так что ASP.NET знает, чтобы выполнить его, когда ваш UpdatePanel сообщения назад. Это будет выглядеть примерно так:

void Page_Load(object sender, EventArgs e)
{
    var setMaskScript =   "$('#txtBoxComplainantCNIC').mask('99999-9999999-9', { placeholder: '' });";
    ScriptManager.RegisterStartupScript(updatePanelID, this.GetType(), "SetMask", setMaskScript, true);
}

где updatePanelID это идентификатор вашего UpdatePanel,

Вот ссылка, которая объясняет RegisterStartupScript и это взаимодействие с UpdatePanel,

Кроме того, несколько методов для выполнения кода при обратной передаче UpdatePanel обсуждаются здесь. Одним из них является просто добавление функции pageLoad в ваш код на стороне клиента.

pageLoad(){
  $("#txtBoxComplainantCNIC").mask("99999-9999999-9", { placeholder: "" });
}

На элементе управления, отправляющем страницу обратно, используйте следующий код:

ScriptManager.RegisterStartupScript(Page, Page.GetType, "temp", "<script type='text/javascript'>$('#txtBoxComplainantCNIC').mask('99999-9999999-9');</script>", False)
Другие вопросы по тегам