Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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 AngularJS文本框值未定义_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript AngularJS文本框值未定义

Javascript AngularJS文本框值未定义,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我创建了一个指令,它将textbox1的值复制到textbox2 function myCopyText() { return { restrict: 'A', link: function(scope, element, attr) { $('#textbox2').val($('#textbox1').val()) } } } 然后在文本框字段上: <input type="text" id="t

我创建了一个指令,它将textbox1的值复制到textbox2

function myCopyText() {
    return {
        restrict: 'A',
        link: function(scope, element, attr) {
            $('#textbox2').val($('#textbox1').val())
        }
    }
}
然后在文本框字段上:

<input type="text" id="textbox1" ng-model="vm.textbox1" my-copy-text />
<input type="text" id="textbox2" ng-model="vm.textbox2" />

它工作正常,直到我提交了
vm.textbox2
始终未定义的表单。但是如果我在textbox2上手动输入一个值,
vm.textbox2
能够显示该值


我觉得奇怪的是,当指令进行赋值时,
vm.textbox2
的值总是未定义的,直到我手动输入一个值。

这是出于设计。当您通过
input/change
事件,因此val()不会触发
setViewValue
,因此不会更新模型值

此指令将模型/视图中的值复制到在“复制到”属性中传递的名称:

function replicateTo($parse) {
   return {
        scope: false,
        require: 'ngModel',
        restrict: 'A',
        link: function(scope, element, attr, ngModelCtrl) {
             var target = $parse(attr.replicateTo);

             var angularRender = ngModelCtrl.$render;

             ngModelCtrl.$render = function(){
                angularRender();
                target.assign(scope, ngModelCtrl.$viewValue);
             };

             ngModelCtrl.$viewChangeListeners.push(function(){
                target.assign(scope, ngModelCtrl.$viewValue);
             });
        }
    }
}

<input type='text' ng-model="vm.textbox1" data-replicate-to="vm.textbox2"/> <br>
函数replicateTo($parse){
返回{
范围:假,
要求:'ngModel',
限制:“A”,
链接:函数(范围、元素、属性、ngModelCtrl){
var target=$parse(attr.replicateTo);
var angularender=ngModelCtrl.$render;
ngModelCtrl.$render=function(){
角度渲染();
分配(范围,ngModelCtrl.$viewValue);
};
ngModelCtrl.$viewChangeListeners.push(函数(){
分配(范围,ngModelCtrl.$viewValue);
});
}
}
}


您正在使用相同的
id=“textbox1”
进行两次输入
$('textbox2')
正在查找一个元素,您忘记了
#
来描述IDSorry,已经修改了上面的代码段。只是放在这里时有一些打字错误,但无论如何。。还是不行,这是故意的。为什么不对两个输入使用相同的ngModel?我已经在textbox上使用了ngModel。这是从textbox1到textbox2的绑定,但在提交表单时问题仍然存在
vm.textbox2
仍然有一个
未定义的
值,除非我在textbox2上手动输入一个值。我在这里进行了测试,它按预期工作,你能给我看一下你的html吗?不用担心,您错过了name属性,该属性是在submiteventname中生成查询字符串所必需的,因为我从ng模型获取值并通过ajax传递。正如我也说过的,我可以得到textbox1的值,但不能得到textbox2的值如果第一小提琴,根据我的解决方案是有效的,问题是什么?继续使用我的解决方案。第二个方法不起作用,因为正如我在回答中所说的,JQuery方法val不会触发模型中的更改