Javascript angularJS绑定到输入';s输入键并提交(如果输入为按钮)

Javascript angularJS绑定到输入';s输入键并提交(如果输入为按钮),javascript,angularjs,Javascript,Angularjs,我有这样的指令,在模式窗口中转到下一个输入(或按钮): .directive('autoVrm', function () { return function (scope, element, attrs) { var counter = 0; element.bind("keydown keypress", function (event) { console.log(element);

我有这样的指令,在模式窗口中转到下一个输入(或按钮):

.directive('autoVrm', function () {
    return function (scope, element, attrs) {
                var counter = 0;
            element.bind("keydown keypress", function (event) {
                console.log(element);           
                if(event.which === 13) {
                        counter++;
                    event.preventDefault();
                    var elementToFocus = element.find('input')[counter] || element.find('button')[1];
                    console.log(elementToFocus.type);
                    if(angular.isDefined(elementToFocus))
                        elementToFocus.focus();
                    if (elementToFocus.type === 'button'){
                        counter = -1;
                        elementToFocus.bind("keydown keypress", function (eventSubmit) {
                            if(eventSubmit.which === 13) {
                                console.log('submit');
                            }
                        });
                    }
                }
            });
        };
但我有一个问题,如果我在按钮上,然后单击“回车”,我会得到:

未捕获类型错误:未定义不是函数

但是为什么呢?如何让输入点击提交表单?不依赖于控制器?

尝试angular.element(elementToFocus.bind)以获得未捕获的TypeError

关于你的新评论:

如果这是在控制器中定义的

$scope.registerUser = function() {
    ...
}
然后在指令中简单地调用它

elementToFocus.bind("keydown keypress", function (eventSubmit) {
    if(eventSubmit.which === 13) {
        scope.registerUser();
    }
});
作为猜测,您可以执行类似于检查attrs参数的操作,以获取“data ng click”的值,并调用相应的函数:

elementToFocus.bind("keydown keypress", function (eventSubmit) {
    if(eventSubmit.which === 13) {
        if (attrs.dataNgClick == "registerUser()" {
            scope.registerUser();
        }
        else if (attrs.dataNgClick == "sign()" {
            scope.sign();
        }
        else if (attrs.dataNgClick == "frgtPassword()" {
            scope.frgtPassword();
        }
    }
});

这种行为已经在web技术中定义。在表单中按ENTER键时,该表单将被提交。要实现这一点,您需要处理正确的事件(ng submit)。你可以用更少的代码达到你想要的效果

angular.module('app',[])
.controller('MyCtrl',函数(){
var self=这个;
self.message=“按ENTER键提交”;
self.count=0;
this.onSubmit=函数(){
self.count++;
self.message=“表单提交”+self.count+“次数”;
};
});

你好,堆栈溢出!
{{ctrl.message}

请提供您的问题。另外,在firefox控制台中检查此错误,它会告诉您哪个函数未定义。@camden_kid elementToFocus.bind(“keydown keypress”,function(eventSubmit){@DonJuwe via permissions我不能这么做…(fiddle)@camden_kid如果我使用此变量执行console.log,我会得到:registerry
.on(“keydown keypress”,…)
而不是
.bind(“keydown keypress”,…)
请参见:在视图中,我有
寄存器
,如果我写入:
scope.registerUser=function(){…}
它将运行指令的方法,而不是控制器您不能在控制器中定义函数吗?-这很简单,只是如何从指令中调用它?ng click不等于enter key我的意思是如果在指令中,则不使用硬编码,而是从ng click=“what is here”获得,比如
注册
登录
frgtPwd