事件虽然注册了一次,但事件被触发了一次以上

时间:2016-04-29 07:19:12

标签: javascript jquery events

我已将$('#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) {会被触发但会被多次触发。这可能是什么原因?

2 个答案:

答案 0 :(得分:1)

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

示例:

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

答案 1 :(得分:0)

如果您不想移动内部点击处理程序,可以采用简单的解决方法:

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