17

我正在使用 jQuery 插件AutoNumeric但是当我提交表单时,我无法删除之前字段的格式POST

我尝试使用$('input').autonumeric('destroy')(和其他方法),但它在文本字段上留下了格式。

如何POST将未格式化的数据发送到服务器?如何删除格式?在初始配置或其他地方是否有它的属性?

我不想将序列化的表单数据发送到服务器(使用 AJAX)。我想提交带有未格式化数据的表单,就像普通的 HTML 操作一样。

4

11 回答 11

14

我在 jQuery 中为此编写了一个更好、更通用的 hack

$('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;
});

此代码使用非 autoNumeric 值的错误处理清除表单。

于 2013-04-05T08:37:53.743 回答
12

对于较新的版本,您可以使用以下选项:

unformatOnSubmit: true
于 2019-06-12T18:13:07.763 回答
2

在数据回调中,您必须调用 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) {

                    }
                }
            }
        }
    });
于 2013-06-18T23:24:47.590 回答
1

使用get方法。

'得到' | 通过 ".val()" 或 ".text()" 返回未格式化的对象 | $(selector).autoNumeric('get');


<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>

insubmit.php忽略 for 的值my_field_formattedmy_field改为使用。

于 2013-04-04T15:45:44.930 回答
1

您可以随时使用 phpstr_replace函数

str_repalce(',','',$stringYouWantToFix);

它将删除所有逗号。如有必要,您可以将值转换为整数。

于 2013-06-11T09:45:11.707 回答
0
$("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 初始化对不起英语不好^_^

于 2016-04-30T00:19:55.837 回答
0

还有另一种集成解决方案,它不会干扰您的客户端验证,也不会导致提交前未格式化的文本闪烁:

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'));
});
于 2016-06-21T08:29:19.677 回答
0

您可以使用getArray方法(http://www.decorplanit.com/plugin/#getArrayAnchor)。

$.post("myScript.php", $('#mainFormData').autoNumeric('getArray'));

于 2016-09-27T15:21:07.480 回答
0

我想出了这个,似乎是最干净的方法。我知道这是一个很老的线程,但它是第一个谷歌匹配,所以我会把它留在这里以备不时之需

$('form').on('submit', function(){
    $('.curr').each(function(){
        $(this).autoNumeric('update', {aSign: '', aDec: '.', aSep: ''});;
    });
});
于 2019-03-02T18:16:23.523 回答
0

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();     
});
于 2020-07-27T08:07:25.980 回答
0

autoNumeric("getArray")不再工作。

unformatOnSubmit: true使用 serializeArray() 使用 Ajax 提交表单时似乎不起作用。

而是用于formArrayFormatted获取等效的序列化数据form.serializeArray()

只需从表单中获取任何 AutoNumeric 初始化元素并调用该方法。它将序列化整个表单,包括非自动数字输入。

$.ajax({
    type: "POST",
    url: url,
    data: AutoNumeric.getAutoNumericElement("#anyElement").formArrayFormatted(),
)};
于 2021-01-25T13:04:18.157 回答