autoNumeric.js удаляет форматирование перед отправкой формы
Я использую плагин jQuery AutoNumeric, но когда я отправляю форму, я не могу удалить форматирование полей раньше POST
,
Я пытался использовать $('input').autonumeric('destroy')
(и другие методы), но он оставляет форматирование текстовых полей.
Как я могу POST
неформатированные данные на сервер? Как я могу удалить форматирование? Есть ли атрибут для него в исходном конфиге или где-то еще?
Я не хочу отправлять сериализованные данные формы на сервер (с AJAX). Я хочу отправить форму с неформатированными данными, как обычное действие HTML.
11 ответов
Я написал лучший, несколько более общий взлом для этого в jQuery
$('form').submit(function(){
var form = $(this);
$('input').each(function(i){
var self = $(this);
try{
var v = self.autoNumeric('get');
self.autoNumeric('destroy');
self.val(v);
}catch(err){
console.log("Not an autonumeric field: " + self.attr("name"));
}
});
return true;
});
Этот код очищает форму с обработкой ошибок по неавтономным значениям.
В более новых версиях вы можете использовать опцию:
unformatOnSubmit: true
Внутри обратного вызова данных вы должны вызвать метод getString, как показано ниже:
$("#form").autosave({
callbacks: {
data: function (options, $inputs, formData) {
return $("#form").autoNumeric("getString");
},
trigger: {
method: "interval",
options: {
interval: 300000
}
},
save: {
method: "ajax",
options: {
type: "POST",
url: '/Action',
success: function (data) {
}
}
}
}
});
Вы всегда можете использовать php str_replace
функция
str_repalce(',','',$stringYouWantToFix);
это удалит все запятые. при необходимости вы можете привести значение к целому числу.
Использовать get
метод.
'получить' | возвращает неотформатированный объект с помощью ".val()" или ".text()" | $(Селектор).autoNumeric('получить');
<script type="text/javascript">
function clean(form) {
form["my_field"].value = "15";
}
</script>
<form method="post" action="submit.php" onsubmit="clean(this)">
<input type="text" name="my_field">
</form>
Это всегда будет представлять "15"
, Теперь проявите креативность:)
Зеркальная сырая стоимость:
<form method="post" action="submit.php">
<input type="text" name="my_field_formatted" id="my_field_formatted">
<input type="hidden" name="my_field" id="my_field_raw">
</form>
<script type="text/javascript">
$("#my_field_formatted").change(function () {
$("#my_field").val($("#my_field_formatted").autoNumeric("get"));
});
</script>
В submit.php
игнорировать значение для my_field_formatted
и использовать my_field
вместо.
Существует еще одно решение для интеграции, которое не мешает проверке на стороне клиента и не вызывает появления неформатированного текста перед отправкой:
var input = $(selector);
var proxy = document.createElement('input');
proxy.type = 'text';
input.parent().prepend(proxy);
proxy = $(proxy);
proxy.autoNumeric('init', options);
proxy.autoNumeric('set', input.val())''
proxy.change(function () {
input.val(proxy.autoNumeric('get'));
});
autoNumeric("getArray")
больше не работает.
unformatOnSubmit: true
не работает, когда форма отправляется с помощью Ajax с использованием serializeArray().
Вместо этого используйте
formArrayFormatted
чтобы получить эквивалентные сериализованные данные
form.serializeArray()
Просто получите любой инициализированный AutoNumeric элемент из формы и вызовите метод. Он будет сериализовать всю форму, включая неавтономные вводы.
$.ajax({
type: "POST",
url: url,
data: AutoNumeric.getAutoNumericElement("#anyElement").formArrayFormatted(),
)};
Я придумал это, кажется, самый чистый способ. Я знаю, что это довольно старая ветка, но это первый матч Google, поэтому я оставлю это здесь на будущее
$('form').on('submit', function(){
$('.curr').each(function(){
$(this).autoNumeric('update', {aSign: '', aDec: '.', aSep: ''});;
});
});
$("input.classname").autoNumeric('init',{your_options});
$('form').submit(function(){
var form=$(this);
$('form').find('input.classname').each(function(){
var self=$(this);
var v = self.autoNumeric('get');
// self.autoNumeric('destroy');
self.val(v);
});
});
classname - ваш входной класс, который будет инициализироваться как autoNumeric. Извините за плохой английский ^_^
Вы можете использовать метод getArray ( http://www.decorplanit.com/plugin/).
$.post("myScript.php", $('#mainFormData').autoNumeric('getArray'));
Решение для сценария использования AJAX
Я считаю, что это лучший ответ среди всех упомянутых выше, поскольку человек, который написал вопрос, использует AJAX. Так что любезно проголосуйте за него, чтобы люди легко его нашли. Для отправки формы, отличной от ajax, ответ, данный @jpaoletti, является правильным.
// Get a reference to any one of the AutoNumeric element on the form to be submitted
var element = AutoNumeric.getAutoNumericElement('#modifyQuantity');
// Unformat ALL elements belonging to the form that includes above element
// Note: Do not perform following in AJAX beforeSend event, it will not work
element.formUnformat();
$.ajax({
url: "<url>",
data : {
ids : ids,
orderType : $('#modifyOrderType').val(),
// Directly use val() for all AutoNumeric fields (they will be unformatted now)
quantity : $('#modifyQuantity').val(),
price : $('#modifyPrice').val(),
triggerPrice : $('#modifyTriggerPrice').val()
}
})
.always(function( ) {
// When AJAX is finished, re-apply formatting
element.formReformat();
});