在jquery中提交不同的值

时间:2015-12-14 19:29:28

标签: javascript jquery

我有以下代码以某种格式显示带有电话号码的输入字段。即,如果电话号码以33,55或81开头,我会将其显示为(33)1234-5678。如果电话号码以任何其他号码开头,则格式为(123)456-7890。

现在,问题是当我提交表单时,它被提交为(33)1234-5678。但我应该提交3312345678并显示(33)1234-5678。

有人可以帮助我,我怎么能克服这个问题。我没有使用任何jquery插件;

<input id="criterion"  name= "criterion" type="tel" class="inputboxBg" size="15" maxlength="60" style="width:85%;" value="" placeholder="" onkeypress = "submitOnReturn(event);">

jQuery(document).ready(function() {
        jQuery("#criterion").change(function () {
            var searchBy = jQuery('#smartWirelessSearch').val();    
            if(searchBy == 'Mobile'){
                jQuery(this).attr("criterion", $(this).val());
                var twoDigit = jQuery('#criterion').val().substr(0, 2);
                var threeDigit = jQuery('#criterion').val().substr(0, 3);
                var remainingDigits = jQuery('#criterion').val().substr(2, 10);
                if (twoDigit == '33' || twoDigit == '55' || twoDigit == '81') {
                    jQuery('#criterion').val('('+twoDigit+')'+' '+remainingDigits.substr(0,4)+'-'+remainingDigits.substr(4,8));
                } else {
                    jQuery('#criterion').val('('+threeDigit+')'+' '+remainingDigits.substr(1,3)+'-'+remainingDigits.substr(4,8));
                }
            }   
        });     
    });

5 个答案:

答案 0 :(得分:2)

您可以在提交表单之前更改值,就在它发送到服务器之前:

$("form").on("submit", function(){
  var originalVal = $("#criterion").val();
  var newVal = originalVal.replace(/[^\d]/g, '');
  $("#criterion").val(newVal);
});

答案 1 :(得分:1)

您可以使用隐藏的输入来存储输入的原始值,然后再进行修改。

<input id="criterion"  name= "criterion" type="tel" class="inputboxBg" size="15" maxlength="60" style="width:85%;" value="" placeholder="" onkeypress = "submitOnReturn(event);">

<input type="hidden" id="org" name="org" />

-

$(document).ready(function() {
    $("#criterion").change(function () {
        var searchBy = $('#smartWirelessSearch').val();  
        $('#org').val($(this).val());
        if(searchBy == 'Mobile'){
            $(this).attr("criterion", $(this).val());
            var twoDigit = $('#criterion').val().substr(0, 2);
            var threeDigit = $('#criterion').val().substr(0, 3);
            var remainingDigits = $('#criterion').val().substr(2, 10);
            if (twoDigit == '33' || twoDigit == '55' || twoDigit == '81') {
                $('#criterion').val('('+twoDigit+')'+' '+remainingDigits.substr(0,4)+'-'+remainingDigits.substr(4,8));
            } else {
                $('#criterion').val('('+threeDigit+')'+' '+remainingDigits.substr(1,3)+'-'+remainingDigits.substr(4,8));
            }
        }   
    });     
});

如果您需要始终保持原始清洁值,那么有很多方法可以做到这一点。一个简单的解决方案就是每次输入更改时都要自己清理它。

如果是,请将$('#org').val($(this).val());替换为$('#org').val($(this).val().replace(/[^\d]/g, ''));

这基本上取代了所有不是带空字符串的数字。

答案 2 :(得分:0)

我建议两种解决方案:

1。切换格式

使用此解决方案,您可以在输入中显示格式化的值,也可以显示干净的仅数字值。因此,您需要注意在提交表单时显示仅数字值,以及用户编辑值时(如@Rune FS所示):

jQuery(function($) {
    function cleanMobile() {
        if ($('#smartWirelessSearch').val() == 'Mobile') {
            // Strip all non-digit characters
            $("#criterion").val($("#criterion").val().replace(/[^\d]/g, ''));
        }
    }
    function formatMobile() {
        if ($('#smartWirelessSearch').val() == 'Mobile') {
            // Apply format after first stripping all non-digit characters
            $("#criterion").val($("#criterion").val()
                .replace(/[^\d]/g, '')
                .replace(/(33|55|81|...)(.*?)(....)$/, '($1) $2-$3'));
        }
    }
    $("#myform").submit(cleanMobile);
    $("#criterion").blur(formatMobile).focus(cleanMobile).keypress(function(e) {
        if (e.keyCode == 13) {                    
            $(this).closest('form').submit();                
        }
    });
    // Set initial format correctly on page load
    formatMobile();
}, jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myform">
    <select id="smartWirelessSearch">
        <option value="Mobile">Mobile</option>
    </select>
    <input  id="criterion"  name="criterion" type="tel" class="inputboxBg" 
            size="15" maxlength="60" style="width:85%;" value="" placeholder=""> 
    <input type="submit" value="submit">
</form>

运行代码段以了解它如何响应焦点并提交。

请注意上面的代码:

  • 使用正则表达式格式化数字;
  • 通过代码而不是元素的onkeypress属性附加按键处理程序;
  • 定义格式操作的函数,以便在blur,focus和submit事件中引用它们;
  • 定义了一个虚拟 smartWirelessSearch 元素,因此代码与您的表单兼容;
  • 为表单提供了一个id myform ,您应该将其替换为您的。

2。使用隐藏输入

如果你不希望输入值在表单提交时明显改变,你可以添加一个隐藏的输入并给出仅数字的值,如下所示:

<input id="criterionClean"  name="criterionClean"  type="hidden">
<input id="criterion"  name= "criterion" type="tel" class="inputboxBg" size="15" 
       maxlength="60" style="width:85%;" value="" placeholder="" 
       onkeypress="submitOnReturn(event);">

在您的Javascript中添加一行:

if(searchBy == 'Mobile'){
    // ... your code ...
    // Then pass the digits only in the hidden input
    $('#criterionClean').val($(this).val().replace(/[^\d]/g, ''));
}

现在您将提交格式化和已清除的值。然后,您的服务器代码可以使用干净的仅数字值。

如果您希望将干净值称为#criterion,则在html和代码中交换两个输入的名称。

答案 3 :(得分:0)

有两种可能性来解决这个问题,第一种方法是让第二个(额外的)隐藏input像:

<input id="criterion"  name= "criterion" type="tel" class="inputboxBg" size="15" maxlength="60" style="width:85%;" value="" placeholder="" onkeypress = "submitOnReturn(event);">
<input id="criterion_hidden"  name= "criterion_real" type="hidden" size="15" maxlength="60" value="" placeholder="" onkeypress = "submitOnReturn(event);">

并在你的jquery中填充它:

jQuery(document).ready(function() {
        jQuery("#criterion").change(function () {
            var searchBy = jQuery('#smartWirelessSearch').val();    
            if(searchBy == 'Mobile'){
                jQuery(this).attr("criterion", $(this).val());
                var twoDigit = jQuery('#criterion').val().substr(0, 2);
                var threeDigit = jQuery('#criterion').val().substr(0, 3);
                var remainingDigits = jQuery('#criterion').val().substr(2, 10);
                $("#criterion_hidden").val(twoDigit + remainingDigits); //update it here.
                if (twoDigit == '33' || twoDigit == '55' || twoDigit == '81') {
                    jQuery('#criterion').val('('+twoDigit+')'+' '+remainingDigits.substr(0,4)+'-'+remainingDigits.substr(4,8));
                } else {
                    jQuery('#criterion').val('('+threeDigit+')'+' '+remainingDigits.substr(1,3)+'-'+remainingDigits.substr(4,8));
                }
            }   
        });     
    });

另一个解决方案是通过使用/[^\d]/g等正则表达式替换来更改服务器端的值(PHP?)。

答案 4 :(得分:0)

提交表单时,将( ) -的输入值替换为空字符串""