2013-04-04 29 views
9

Tôi đang sử dụng plugin jquery -> AutoNumeric (http://www.decorplanit.com/plugin/) và khi tôi gửi biểu mẫu tôi không thể xóa định dạng trên các trường trước POST.autoNumeric.js xóa định dạng trước khi gửi biểu mẫu

Tôi đã cố gắng sử dụng $('input').autonumeric('destroy') (và các phương pháp khác) nhưng nó để lại định dạng trên các trường văn bản.

Tôi làm cách nào để đăng dữ liệu chưa định dạng lên máy chủ? Làm thế nào tôi có thể loại bỏ các định dạng? Có một thuộc tính cho nó trong cấu hình ban đầu, hoặc ở một nơi khác?

--chỉnh sửa Tôi không muốn gửi dữ liệu biểu mẫu được tuần tự tới máy chủ (với ajax). Tôi muốn gửi biểu mẫu với dữ liệu chưa định dạng như một hành động html thông thường.

Trả lời

12

Tôi đã viết một tốt hơn, hack hơi tổng quát hơn cho điều này trong 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; 
}); 

Mã này làm sạch dạng w/xử lý lỗi trên các giá trị không autoNumeric.

+0

tốt đẹp, nhưng trong một hoặc hai giây (trong khi gửi biểu mẫu), tôi thấy giá trị chưa được định dạng. Nó chỉ là một vấn đề về mỹ phẩm, nhưng nó hơi khó chịu. – Adrian

+1

Không cần thiết nữa, bạn chỉ có thể sử dụng tùy chọn sau ngay bây giờ: '{unformatOnSubmit: true}' – Alex

1

Sử dụng phương thức get.

'get' | trả về đối tượng chưa được định dạng thông qua ".val()" hoặc ".text()" | $ (bộ chọn) .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> 

này sẽ luôn luôn nộp "15". Bây giờ có được sáng tạo :)


trị liệu gương:

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

Các trong submit.php bỏ qua giá trị cho my_field_formatted và sử dụng my_field để thay thế.

+0

lấy phương thức trả về giá trị của trường nhập. tôi cần gửi biểu mẫu chưa được định dạng. tôi không muốn nhận giá trị chưa được định dạng cho một trường. – zeal

+0

Sau đó 'nhận' giá trị và gửi? Tôi giả sử bạn có một số trình xử lý 'onsubmit' tùy chỉnh tại chỗ, nếu không, hãy làm một cái, bạn sẽ cần nó. – Halcyon

+0

để không thể gửi dữ liệu chưa định dạng mà không có yêu cầu ajax? – zeal

1

Bạn luôn có thể sử dụng php str_replace chức năng

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

nó sẽ loại bỏ tất cả dấu phẩy. bạn có thể truyền giá trị thành số nguyên nếu cần.

+0

tại sao php? (fyi tôi đã sử dụng java ở phía máy chủ cho ứng dụng.) giải pháp sai, không phải là câu trả lời. – zeal

+0

Điều đó không quan trọng. Java có thể có các phương thức có chức năng tương tự. Tôi thấy nó như là một giải pháp bởi vì nó sẽ loại bỏ các định dạng và đó là muốn chúng tôi muốn. tại sao nó quan trọng để làm điều đó phía khách hàng? – Reza

+1

vì nó sạch hơn nhiều trong một ứng dụng nhiều lớp. đọc ví dụ: http://en.wikipedia.org/wiki/Loose_coupling cho ý tưởng. – zeal

2

dữ liệu bên trong gọi lại bạn phải gọi phương thức getString như dưới đây:

 $("#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) { 

        } 
       } 
      } 
     } 
    }); 
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 là lớp đầu vào của bạn sẽ init như autoNumeric Xin lỗi cho tiếng Anh xấu^_^

0

Có là một giải pháp khác để tích hợp không ảnh hưởng đến việc xác thực phía máy khách của bạn cũng không gây ra flash của văn bản chưa được định dạng trước khi gửi:

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')); 
}); 
Các vấn đề liên quan