页面在第一次点击时重新加载,并在随后的点击中正常工作

问题描述 投票:0回答:0

第一次触发

clipboard.on
函数会重新加载页面(e.preventDefault()给出,这不是函数错误)但是从第二次开始它就可以正常工作了。当第一次触发
clipboard.on
功能时,我必须阻止它重新加载。

export function end_message_row_edit($row) {
    const message = message_lists.current.get(rows.id($row));
    if (message !== undefined && currently_editing_messages.has(message.id)) {
        const scroll_by = currently_editing_messages.get(message.id).scrolled_by;
        const original_scrollTop = message_viewport.scrollTop();

        // Clean up resize event listeners
        const listeners = currently_editing_messages.get(message.id).listeners;
        const edit_box = document.querySelector(
            `#edit_form_${CSS.escape(message.id)} .message_edit_content`,
        );
        if (listeners !== undefined) {
            // Event listeners to clean up are only set in some edit types
            edit_box.removeEventListener("mousedown", listeners[0]);
            document.body.removeEventListener("mouseup", listeners[1]);
        }

        currently_editing_messages.delete(message.id);
        message_lists.current.hide_edit_message($row);
        message_viewport.scrollTop(original_scrollTop - scroll_by);

        compose.abort_video_callbacks(message.id);
    }
    if ($row.find(".condensed").length !== 0) {
        condense.show_message_expander($row);
    } else {
        condense.show_message_condenser($row);
    }
    $row.find(".message_reactions").show();

    // We have to blur out text fields, or else hotkeys.js
    // thinks we are still editing.
    $row.find(".message_edit").trigger("blur");
    // We should hide the editing typeahead if it is visible
    $row.find("input.message_edit_topic").trigger("blur");
}

export function show_copied_confirmation($copy_button) {
    // Display a tooltip to notify the user the message or code was copied.
    const instance = tippy($copy_button, {
        placement: "top",
        appendTo: () => document.body,
        onUntrigger() {
            remove_instance();
        },
    });
    instance.setContent($t({defaultMessage: "Copied!"}));
    instance.show();
    function remove_instance() {
        if (!instance.state.isDestroyed) {
            instance.destroy();
        }
    }
    setTimeout(remove_instance, 3000);
}

主要功能

    const clipboard = new ClipboardJS(source, {
        target: () =>
            document.querySelector(`#edit_form_${CSS.escape(message_id)} .message_edit_content`),
    });

    clipboard.on("success", (e) => {
        e.clearSelection();
        source._tippy.setContent($t({defaultMessage: "Copied!"}));
        show_copied_confirmation(source);
        setTimeout(() => {
            end_message_row_edit($row);
        }, "2000");
    });
}
javascript jquery reload tippyjs
© www.soinside.com 2019 - 2024. All rights reserved.