在angular指令上的表单提交之前更改输入值

时间:2013-12-18 17:37:59

标签: javascript jquery forms angularjs angularjs-directive

我有一个自定义指令,它将数字掩码应用于文本输入。所以,我输入的值如下: 999.999.999 。我的问题是我想在提交表单之前将此值更改为 999999999 ,以便向服务器端发送“干净”值。问题是:我如何在mi指令中执行此操作?

我尝试在链接函数中使用以下代码,但是,我有点迷失。

$(_element).parents('form').submit( function() {
    //I don't know how to change the input value here...
    return true;
});

2 个答案:

答案 0 :(得分:2)

使用此:

$(_element).parents('form').submit( function() {
  $('input').val().replace('.', ''); 
  return true;
});

这将替换输入的值,要替换的值将为.,并且要替换的值将不存在。所以你会得到想要的答案!

答案 1 :(得分:1)

简短的回答是你需要设置元素的值,使用(例如)一个简单的RegEx去除点:

var enteredValue = $(_element).val();
$(_element).val(enteredValue.replace(/\./g,''));

然而,与Angular的表单处理集成可能是一个好主意,它具有许多钩子以这种方式处理输入的验证和处理。具体来说,使用Angular的ngModelController的$解析器来处理用户输入的值,并且只允许“好”值进入范围内的模型。您可以在现有的自定义指令中执行此操作,也可以单独执行以下操作:

app.directive('cleanNumber', function() {
  return {
    require: 'ngModel',
    link: function link(scope, iElement, iAttrs, ngModelController) {
      ngModelController.$parsers.push(function(val) {
        return val.replace(/\./g,'');
      });
    }
  };
});

您可以将其用作属性:

<input type="text" name="number" ng-model="number" clean-number />

然后,您可以使用ngSubmit指令调用函数提交表单:

<form name="myForm" ng-submit="submit()">
  ...
  <button type="submit">Submit!</button>
</form>

然后处理后的值在$scope.number范围内可用。您可以在my plunkr中看到这一点。

相关问题