Как удалить маску ввода, когда форма ajax отправляется как FromData?

Бывает, что у моей формы ajax есть вход для загрузки файла, и поэтому я должен отправить его с FormData вместо простого .serialize(), Затем я нашел autoUnmask на моем jquery.inputmask уже давно не эффективно.

Вот пример: http://jsfiddle.net/btqtnumL/1/

Когда форма отправлена, результат из .serialize() имеет значение с удаленной маской ввода. Но результат от FormData() по-прежнему показывает маску.

Content-Disposition: форма-данные; имя = "стоимость"

1000

Как мы можем снять маску в этом случае?

4 ответа

Решение

Во-первых, чтобы получить немаскированное значение из ввода, используйте inputmask ('unmaskedvalue') (здесь ссылка).

Один из способов - переименовать элемент ввода во что-то вроде masked-cost, а затем использовать метод.append().

<input name="masked-cost" .... />

В JavaScript вы можете сделать что-то вроде этого

var formData = new FormData($form[0]);
formData.append('cost', $('input[name="masked-cost"]').inputmask('unmaskedvalue'));

На стороне сервера вы можете получить переменную стоимости с немаскированным значением.

FormData будет выглядеть примерно так

------WebKitFormBoundaryMHLOLWal6cTPLuBG Content-Disposition: form-data; Name="замаскированная стоимость"

1 000 ------WebKitFormBoundaryMHLOLWal6cTPLuBG Content-Disposition: form-data; имя = "стоимость"

1000

Вот обновленная демоверсия http://jsfiddle.net/dhirajbodicherla/btqtnumL/2/

Просто удалите маску ввода перед FormData.

      $('#form_id :input').inputmask('remove');
data = new FormData($('#form_id'));

Просто нашел альтернативный способ.

Мы можем использовать JQuery .val() получить значение без его маски.

$.each($('[data-mask="integer"]'), function (idx) {
    var input = $('[data-mask="integer"]')[idx];
    var actualValue = $(input).val();
    $(input).val(actualValue);
});

Тогда мы можем получить данные для AJAX с $form.serialize(),

Таким образом, мы избегаем использования FormData апи.

Это просто. В вашем javascript Используйте строковый метод.replace с регулярным выражением \D, который является сокращенным классом символов, который соответствует всем не цифрам. Итак, шаги:

получить значение поля маски ввода.

 var number = $("#your_field_id").val();

Теперь используйте метод.replace с регулярным выражением \ D

number =  number.replace(/\D/g,'');

Имейте в виду, что это просто техника, а вышеприведенные коды работают только для числа. По вашему требованию используйте регулярные выражения. больше https://regexr.com/

Другие вопросы по тегам