事件虽然注册了一次,但会触发多次

Event though registered once, event is fired more than one time

本文关键字:一次 注册 事件      更新时间:2023-09-26

我定义$('#userUVEdit-modal').on('click'事件如下。它已在另一个单击事件中注册。但我不明白为什么它被炒了不止一次。

$('#usersTable').on('click','.uv-user-edit-btn', function (event) {
    event.preventDefault();
    var rowData =   getJqGridRowData($(this).closest('tr'));
    var selectedUserID = $(rowData.userId).find('.uv-user-edit-btn').attr('value');
    var isInstanceAlreadyAssigned = $(rowData.instanceName).attr('id');
    if(isInstanceAlreadyAssigned && typeof isInstanceAlreadyAssigned != undefined) {
        instanceId = isInstanceAlreadyAssigned;
    }else {
        instanceId = -1;
    }
    $('#edit-uv-username').val($(rowData.username).html());
    var requests_interface  =   new requests_interface_instance.getAllInstances();
    requests_interface.init(requests_callback_instance.getAllInstancesCallBack);
    requests_interface.execute();
    // THE FOLLOWING FUNCTION IS FIRED MORE THAN ONCE
    $('#userUVEdit-modal').on('click','#userUVEditButton', function(event) {
        event.preventDefault();
        var result = validateRequiredFields('#userUVEdit-modal');
        if(result['status']) {
            var dataObj =   createFormObject('#userUVEdit-modal');
            dataObj['user_id'] = selectedUserID;
            dataObj['instanceId'] = instanceId; // Tells the previous instance allotted
            var requests_interface  =   new requests_interface_instance.mapUserToInstance();
            requests_interface.dataObj = dataObj;
            requests_interface.init(requests_callback_instance.mapUserToInstanceCallBack);
            requests_interface.execute();
        }
    });
});

单击#userUVEditButton时,$('#userUVEdit-modal').on('click','#userUVEditButton', function(event) {将被激发,但它会被激发多次。这可能是什么原因?

我认为这是因为每次单击.uv-user-edit-btn时,都会在#userUVEditButton上绑定单击事件。Try-off()函数,它将删除事件处理程序,然后on()将在元素上添加事件处理程序。

示例:

$('#userUVEdit-modal').off().on('click','#userUVEditButton', ...

如果你不想移动内部点击处理程序,一个简单的解决方法:

$('#userUVEdit-modal').off('click').on('click' ...