Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用js实现表单增值_Javascript_Jquery_Forms - Fatal编程技术网

Javascript 用js实现表单增值

Javascript 用js实现表单增值,javascript,jquery,forms,Javascript,Jquery,Forms,我正在尝试编写一个订单,自动显示所选项目的价值。后端已经完成,在前端的每个字段上,all radio/checkbox如下所示: <input type="radio" name="shirt-size" value="shirt_size_m[18]" /> function calculate_sum(form_id) { var $form = $(form_id); var sum = 0; $checkbox_and_radios = $form.find('

我正在尝试编写一个订单,自动显示所选项目的价值。后端已经完成,在前端的每个字段上,all radio/checkbox如下所示:

<input type="radio" name="shirt-size" value="shirt_size_m[18]" />
function calculate_sum(form_id) {
  var $form = $(form_id);
  var sum = 0;
  $checkbox_and_radios = $form.find('input[type=checkbox], input[type=radio]').each(function(){
    sum += parseInt($(this).val().match(/^[^\[]+\[(\d+)\]$/)[1]);
  });
  return sum;
}

$(function(){
  $("#id_of_the_form").find('input[type=checkbox], input[type=radio]').change(function(){
    var sum = calculate_sum("#form_id");
    // I don't know the type of your element containing
    // the sum, so I put multiple solutions here:
    // some input element
    $('#another_id').val(sum);
    // or another element
    $('#another_id').html(sum);
    // I'm assuming you don't really mean append
    // If you're sure you want to append: (but then the old value won't be deleted)
    $('#another_id').append(sum);
  });
});

“18”是价格,其他一切与前端价格计算无关。我无法更改命名约定,因此我需要获取页面上所有
的括号之间的值(或在父ID下方),将它们添加到一起(更新时),并将值附加到另一个ID。如果这使thongs更容易,那么Jquery已经在站点上使用


我只需要指出正确的方向,因为我的JS体验仅限于示例和小型定制:)

尝试使用简单的正则表达式和Javascript,用空字符串替换所有非数字字符:

var str = "shirt_size_m[18]";
var theNumber = parseInt(str.replace(/[^0-9]/g, ''));
alert(theNumber);
演示:

您可以使用:

var v;
v = $('#input-identifier').val();

v = v.split("[");
v = v[1];
v = v.split("]");
v = v[0];

//现在v有了数字

您可以尝试以下方法:

<input type="radio" name="shirt-size" value="shirt_size_m[18]" />
function calculate_sum(form_id) {
  var $form = $(form_id);
  var sum = 0;
  $checkbox_and_radios = $form.find('input[type=checkbox], input[type=radio]').each(function(){
    sum += parseInt($(this).val().match(/^[^\[]+\[(\d+)\]$/)[1]);
  });
  return sum;
}

$(function(){
  $("#id_of_the_form").find('input[type=checkbox], input[type=radio]').change(function(){
    var sum = calculate_sum("#form_id");
    // I don't know the type of your element containing
    // the sum, so I put multiple solutions here:
    // some input element
    $('#another_id').val(sum);
    // or another element
    $('#another_id').html(sum);
    // I'm assuming you don't really mean append
    // If you're sure you want to append: (but then the old value won't be deleted)
    $('#another_id').append(sum);
  });
});

如果可能存在前导0,请使用parseInt(str.replace(/[^0-9]/g'),10)。parseInt的第二个参数本质上是要使用的数字系统。如果省略了它,并且有一个前导0,则parseInt将在十六进制(基数16)处解释它