Как я могу исключить кнопку и метку из сериализации формы? - PullRequest
0 голосов
/ 19 марта 2019

Я хочу использовать сериализацию формы, но исключаю кнопку и метку из сериализации.

Это версия моего JavaScript:

var saveBtn = document.getElementById("btnSaveButton");
var saveLbl = document.getElementById("lblSaveLabel");
var originalFormData = $("#MasterForm").not(saveBtn, saveLbl).serialize();
$("form :input").on('change keyup paste mouseup', function () {
    var newFormData = $("#MasterForm").serialize();
    if (originalFormData != newFormData) {
        //some code
    } else {
        //some other code
    }
});

См .: .not (saveBtn, saveLbl)

Это не исключает кнопку или метку.

Может кто-нибудь помочь мне и сообщить, как я могу исключить кнопку и метку из сериализации?

По сути, я переключаю дисплей с кнопки на метку и обратно в зависимости от того, внес ли пользователь какие-либо изменения в форму.

ОБНОВЛЕНИЕ ОБНОВЛЕНИЕ

Спасибо заответы ... кажется, что что-то не так ...

Возможно, здесь слишком много html для публикации ...

Использование vb.net.У меня есть главная страница, на ней есть страница с именем Admin.aspx, а внутри нее - пользовательский контроль Bundles.ascx.

В коде Bundles.ascx у меня есть этот javascript:

    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_pageLoaded(prmRequest);
    prm.add_endRequest(prmRequest);
    function prmRequest(sender, args) {
       setupFormChangeCheck("btnSaveBundle", langId); 
   }

В основном файле javascript у меня есть функция setupFormChangeCheck, которая выглядит следующим образом:

function setupFormChangeCheck(txtName, langId) {
    try {
        savebtnFnctn('dis', txtName, langId)
        var originalFormData = $("#MasterForm").serialize();
        $("form :input").on('change keyup paste mouseup', function () {
            var newFormData = $("#MasterForm").serialize();
            if (originalFormData != newFormData) {
                savebtnFnctn('en', txtName, langId)
            } else {
                savebtnFnctn('dis', txtName, langId)
            }
        });
    } catch (err) { }
}

В том же главном файле javascript у меня есть функция savebtnFunction, которая выглядит следующим образом:

function savebtnFnctn(event, txtName, langId) {
    var saveBtn = document.getElementById(txtName);
    var saveLbl = document.getElementById(txtName.replace("btn", "lbl"));
    if (event == 'en') {
        saveBtn.style.display = "inline";
        saveLbl.style.display = "none";
    } else if (event == 'dis') {
        saveBtn.style.display = "none";
        saveLbl.style.display = "inline";
    }
}

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

Динамическая загрузка пользовательского элемента управления приводит к серьезным проблемам обратной передачи.Таким образом, подавляющее большинство взаимодействий пользовательского управления обрабатываются на стороне клиента с помощью jquery.Для Bundle.ascx это делается в Bundle.js

SOOOOO ....

Когда пользовательский элемент управления загружен, запускается setupFormChangeCheck, который запускает событие dis (отключить) в функцииsavebtnFnctn.

Вот проблема, которую я заметил сегодня, когда попробовал код из предложений выше.

Когда я взаимодействую в Bundle uc, setupFormChangeCheck не запускается с самого начала.Сначала запускается эта строка $ ("form: input"). On ('change keyup paste mouseup', function ()

И что бы я ни делал, щелкаю в текстовом поле, даже не меняя ничего, приводитthis: originalFormData! = newFormData = true, а кнопка Сохранить остается активной ...

Я должен добавить, что все элементы управления в пользовательском элементе управления Bundle находятся внутри панели обновления:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

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

Спасибо. Эрик

1 Ответ

0 голосов
/ 19 марта 2019

Метод .not () в jQuery принимает селектор, а не элементы. Кроме того, вы соответствуете самой форме, а не ее входным данным.

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

var data = $("#MasterForm").find("input, textarea, select").not("#btnSaveButton, #lblSaveLabel").serialize();
  1. Вы выбираете форму.
  2. Затем вы выбираете элементы формы внизу.
  3. Тогда вы исключаете конкретные элементы из коллекции.
  4. Наконец, вы сериализуете результаты.

ПРИМЕЧАНИЕ: Вы должны использовать строгое сравнение !== вместо !=.

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