javascript - 每次点击时都会再次调用自定义函数

标签 javascript jquery angularjs

我是 Angular JS 的新手,我已经设置了一个带有项目表的基本 HTML 页面。 我希望能够单独删除每个项目,因此我为 HTML 表格的每一行添加了一列,其中包含一个删除按钮。 这就是本专栏的样子。

<td headers="deleteRoleHeader" class="cell-texte">
    <span class="glyphicon glyphicon-trash" ng-click="deleteRole();"></span>
</td>

还有我的 Angular JS 函数:

$scope.deleteRole = function(){
    var data = {
                codeRole: $scope.code_role,
                descRole : $scope.desc_role
               };
    console.log(data);
};

我的问题是每次我单击删除按钮时,我的函数都会比前一次被调用一次。 澄清一下:第一次点击时,函数被调用一次,第二次点击时,函数被调用两次,依此类推。

我希望当我单击删除按钮时只调用我的函数一次。

有人遇到过类似的问题吗? 我读过很多有关多次调用函数的 stackoverflow 问题,但我无法解决我的问题。

预先感谢您的帮助。

编辑:这是我点击两次后的控制台输出 Example

编辑2:我找出了导致问题的原因:我设置了一个模式,作为确认,如果我删除它,我的代码将按其应有的方式运行(仅对该函数进行一次调用) 这是重现问题的 fiddle :https://jsfiddle.net/w6edum0f/12/ .

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.roles = [
{
    "codeRole": "test",
    "descRole": "test desc"
  },
  {"codeRole": "test2",
    "descRole": "test desc1"
  }
];
  $scope.selectRole = function(role) {
    $scope.code_role = role.codeRole;
    $scope.desc_role = role.descRole;
  };

    $scope.deleteRole = function(){
        $('#deleteModal').show();
        $('#deleteBtn').click(function(){
            $('#deleteModal').hide();
            var data = {
                codeRole: $scope.code_role,
                descRole : $scope.desc_role
            };
            console.log(data);
        });
    };
});

最佳答案

first time I click, function is called once, second time I click, function is called twice, etc.

发生这种情况是因为代码在每次调用时添加另一个点击处理程序:

ERRONEOUS

$scope.deleteRole = function(){
    $('#deleteModal').show();
    $('#deleteBtn').click(function(){
        $('#deleteModal').hide();
        var data = {
            codeRole: $scope.code_role,
            descRole : $scope.desc_role
        };
        console.log(data);
    });
};

一种解决方案是删除调用后的点击处理程序:

$scope.deleteRole = function(){
    $('#deleteModal').show();
    $('#deleteBtn').on("click", hideModal);
};
function hideModal(){
    $('#deleteModal').hide();
    $('#deleteBtn').off("click", hideModal); 
    var data = {
        codeRole: $scope.code_role,
        descRole : $scope.desc_role
    };
    console.log(data);
};

关于javascript - 每次点击时都会再次调用自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55926317/

相关文章:

javascript - dataModel URL javascript 函数不填充网格

javascript - 如何获取 ng-options 值并在内部值发生变化时触发函数?

angularjs - karma + Jasmine + Angular "Argument is not a function"

javascript - 如何设置 v-data-table 上特定行的样式? [验证]

javascript - 什么会导致浏览器不执行脚本?

javascript - 我如何通过让客户在谷歌地图中放置标记来获取客户的纬度和位置?

jquery - 控制滚动 OnScroll 滑动

javascript - angular 中的有效 jq,ether angular.element ("#n") 或 $ ("#n")

javascript - 当通过 ng-view 包含时,带有 bootstrap 3 Accordion 的 AngularJS 不起作用

javascript - 使用 javascript 从字符串中获取特定值