# 过早发布的尴尬失误

**URL:** <https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908>\
**Category:** UX\
**Created:** [2026年二月12日 12:35 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908 "2026-02-12T12:35:05Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)\
**Post date:** [2026年二月12日 12:35 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/1 "2026-02-12T12:35:05Z")

</div>

我似乎在各种非聊天类的应用中患上了“过早发送”的毛病。

主要是在电子邮件（Gmail）和 Discourse 中。

发生的情况是，我写完信息，然后不小心就发送出去了。这种不便发生得太频繁了，超出了我的接受范围，这很可能是因为一个键盘快捷键，比如 \text{Ctrl} + \text{Enter}，或者（可能更常见的是？）$\text{Tab ↹} 然后 \text{Enter}$。

在 Gmail 上我可以应对：有一个很短的时间窗口可以取消邮件发送。太棒了！🙌 为了完全避免在写作时发送帖子，我不会填写收件人输入框。我会在发送邮件前最后一步才做这件事。

但在 Discourse 上，对于非私信（PM），这是不可能的。我试过从“分类”选择器中移除默认分类，这样发送帖子时我可能会遇到“分类不能为空”的消息，但唉，我做不到。

过早提交一个主题或回复是很尴尬的。我可以立即删除它，但内容仍然对其他人可见（他们只需点击编辑图标），因为这是 Discourse 的默认行为。而且我无法在它被删除时完成内容，以便之后撤销删除。

最后，我只能选择让我的帖子保持不完整（通常是在一个句子或一个单词中间 🥴），然后耐心地编辑它，我不太喜欢这样做，因为我写字也慢，或者我删除它，然后写一个新的主题/帖子来代替。

由于这种情况经常发生在长消息上，或者是我需要深思熟虑的消息上，我很高兴能有一个可切换的锁定 🔏 图标，可以完全阻止消息发送。

我并不是特别建议在 Discourse 中添加这个功能……除非很多用户也遇到这种情况 😄

这更多是关于分享这种经历，以及在 Discourse 中过早发送帖子所带来的后续尴尬，听取其他成员的意见，并分享防止这种情况发生的想法。

至于我自己，即使是一个用户脚本（userscript）也能解决问题。 ~~不幸的是，我不知道如何阻止 Discourse 的键盘快捷键发送帖子，人工智能也不知道。~~  
编辑：请看 [The awkward mishap of premature posting - #10 by Canapin](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/10?u=canapin)

## 你是否也受到过早发送的困扰？

_Poll ([view on site](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/1))_

## 你是否希望能够在 Discourse 中“锁定”编辑器？

_Poll ([view on site](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/1))_

期待听到你们的想法！

---

<div class="post-metadata">

**Author:** ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)\
**Post date:** [2026年二月12日 12:50 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/2 "2026-02-12T12:50:31Z")

</div>

我也是——在使用触摸屏时。非常烦人。

---

<div class="post-metadata">

**Author:** ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Post date:** [2026年二月12日 13:29 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/3 "2026-02-12T13:29:39Z")

</div>

这太有共鸣了。在 Chat\[1\] 中也会发生这种情况。有时我希望有一个确认弹出窗口或一个 10 秒的窗口来进行永久删除。

* * *

1. 即 Discourse 中的聊天

---

<div class="post-metadata">

**Author:** ![ToddZ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/toddz/32/328350_2.png) [@ToddZ](https://meta.discourse.org/u/ToddZ)\
**Post date:** [2026年二月12日 21:41 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/4 "2026-02-12T21:41:41Z")

</div>

对我来说，过早发布的情况并不常见（我 99% 的时间都在使用桌面版），但我能理解那种尴尬。是否可以给用户一个很短的时间来_隐藏_他们的帖子以便进一步编辑——也许只有在没有回复的情况下？

编辑：当然，那样也无法隐藏编辑历史记录…… 😅

---

<div class="post-metadata">

**Author:** ![jordanjay29](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jordanjay29/32/529474_2.png) [@jordanjay29](https://meta.discourse.org/u/jordanjay29)\
**Post date:** [2026年二月12日 22:53 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/5 "2026-02-12T22:53:44Z")

</div>

我尊重它，但没有亲身体验过。我更喜欢编辑宽限期，因为这样我可以随意重读和校对，而且一旦一个重要的大帖子发布了，我仍然会发现错误。编辑能很好地掩盖我的“罪行”。

人各有异，犯错也各有不同。

---

<div class="post-metadata">

**Author:** ![nobrowser](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nobrowser/32/240031_2.png) [@nobrowser](https://meta.discourse.org/u/nobrowser)\
**Post date:** [2026年二月13日 05:54 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/6 "2026-02-13T05:54:51Z")

</div>

我使用外部编辑器来填写任何较长的网站字段，这当然也包括 Discourse 帖子。在编辑器中，我拥有我所有常用的程序员编辑器快捷键绑定，所以它在各个方面都更好。只有当我确定文本完成后，我才会使用复制粘贴将其传输到编辑器中，然后按下那个大按钮。

您考虑过这种工作流程吗？

---

<div class="post-metadata">

**Author:** ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)\
**Post date:** [2026年二月13日 23:54 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/7 "2026-02-13T23:54:45Z")

</div>

看到很多不同的经历很有趣。我从不在智能手机上发帖出错，只在桌面上会。

> [@nobrowser](#):
>
> 你考虑过这个工作流程吗？

是的，我在其他场景下会使用它。我先在 Google Docs 上写好消息，然后再复制粘贴到目标消息应用程序中。

但在 Discourse 上，如果我需要在帖子中添加图片、引用或使用特定于 Discourse 的功能时，会有点烦人。

* * *

我已经写草稿好几天了，每次修改它都总是一种有点紧张的体验，我需要时刻保持格外小心，以免发送出去。:lolsob:

---

<div class="post-metadata">

**Author:** ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)\
**Post date:** [2026年二月14日 06:40 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/8 "2026-02-14T06:40:48Z")

</div>

> [@Canapin](#):
>
> 我首先在 Google Docs 上撰写我的消息

当我写一篇较长的帖子时，我使用类似的解决方案。但由于我正试图停止使用 Google 等服务，并且主要在 iPad 上工作，我的工具是 Ulysses 应用。主要是因为它支持 Markdown。一种与 Discourse 使用的语法不完全相同的语法。

我对这一点有复杂的感受。一方面，我不喜欢需要分离应用程序（但我也将其用于 WordPress；现在在那里创建内容很痛苦），但另一方面，我拥有一个稍微更强大和集中的环境。

这对我是个大问题吗？不，这只是令人恼火。当 Discourse 更改了留下未成熟作品的样式时，情况更糟，我因为肌肉记忆丢失了太多草稿 🤪

---

<div class="post-metadata">

**Author:** ![sterretje](https://avatars.discourse-cdn.com/v4/letter/s/cdc98d/32.png) [@sterretje](https://meta.discourse.org/u/sterretje)\
**Post date:** [2026年二月14日 08:35 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/9 "2026-02-14T08:35:01Z")

</div>

> [@Canapin](#):
>
> 我写草稿已经好几天了，每次写的时候都感觉有点压力。我需要时刻非常小心，以免不小心发送出去。:lolsob:

一个可能的解决方法是给自己发一个私信（PM）作为草稿。即使不小心发送了，也不会造成任何伤害，因为它只对你自己可见 🙂

---

<div class="post-metadata">

**Author:** ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)\
**Post date:** [2026年二月14日 11:28 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/10 "2026-02-14T11:28:56Z")

</div>

这是一个添加了可切换锁定功能的撰写器（composer）的用户脚本。  
它还会禁用键盘快捷键，并且也适用于移动设备。

![IXlc8u1sm4](https://global.discourse-cdn.com/meta/original/4X/d/3/4/d34de659ce5d0499566a82560098d68f71d930c9.gif)

[https://greasyfork.org/en/scripts/566254-discourse-composer-safety-lock](https://greasyfork.org/en/scripts/566254-discourse-composer-safety-lock)

添加或删除 `@match` 行以在你使用的论坛上启用它。

```js
// ==UserScript==
// @name Discourse Composer Safety Lock
// @namespace https://meta.discourse.org
// @version 2.0
// @description Togglable padlock on the composer to prevent accidental post submission
// @author Canapin & AI
// @match https://meta.discourse.org/*
// @grant none
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
 
  let locked = false;
 
  // Capture-phase listener on #reply-control to block Ctrl/Cmd/Alt+Enter
  function attachBlocker(replyControl) {
    if (replyControl._safetyLockAttached) return;
    replyControl._safetyLockAttached = true;
 
    replyControl.addEventListener(
      "keydown",
      function (e) {
        if (!locked) return;
        if (e.key === "Enter" && (e.ctrlKey || e.metaKey || e.altKey)) {
          e.stopImmediatePropagation();
          e.stopPropagation();
          e.preventDefault();
        }
      },
      true
    );
  }
 
  function updateButtons() {
    const rc = document.getElementById("reply-control");
    if (!rc) return;
    rc.querySelectorAll(".save-or-cancel .btn-primary").forEach((btn) => {
      if (locked) {
        btn.style.pointerEvents = "none";
        btn.style.filter = "grayscale(1) opacity(0.4)";
        btn.setAttribute("tabindex", "-1");
      } else {
        btn.style.pointerEvents = "";
        btn.style.filter = "";
        btn.removeAttribute("tabindex");
      }
    });
  }
 
  // Capture-phase click blocker on save button
  document.addEventListener(
    "click",
    function (e) {
      if (!locked) return;
      if (e.target.closest(".save-or-cancel .btn-primary")) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  // Capture-phase keydown blocker for Enter on focused save button
  document.addEventListener(
    "keydown",
    function (e) {
      if (!locked) return;
      if (
        e.key === "Enter" &&
        e.target.closest(".save-or-cancel .btn-primary")
      ) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  function injectPadlock() {
    if (document.getElementById("composer-lock-btn")) return;
    const title = document.querySelector(".composer-action-title");
    if (!title) return;
 
    const btn = document.createElement("span");
    btn.id = "composer-lock-btn";
    btn.textContent = locked ? "\u{1F512}" : "\u{1F513}";
    btn.style.cssText =
      "cursor:pointer;margin-left:10px;font-size:1.1em;user-select:none;opacity:" +
      (locked ? "1" : "0.5");
 
    btn.addEventListener("click", (e) => {
      e.preventDefault();
      e.stopPropagation();
      locked = !locked;
      btn.textContent = locked ? "\u{1F512}" : "\u{1F513}";
      btn.style.opacity = locked ? "1" : "0.5";
      updateButtons();
    });
 
    title.appendChild(btn);
    updateButtons();
  }
 
  const observer = new MutationObserver(() => {
    const rc = document.getElementById("reply-control");
    if (rc && rc.classList.contains("open")) {
      attachBlocker(rc);
      injectPadlock();
      updateButtons();
    }
  });
 
  observer.observe(document.body, {
    childList: true,
    subtree: true,
    attributes: true,
    attributeFilter: ["class"],
  });
 
  const rc = document.getElementById("reply-control");
  if (rc && rc.classList.contains("open")) {
    attachBlocker(rc);
    injectPadlock();
    updateButtons();
  }
})();

```

---

<div class="post-metadata">

**Author:** ![stephtara](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephtara/32/517827_2.png) [@stephtara](https://meta.discourse.org/u/stephtara)\
**Post date:** [2026年二月14日 11:58 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/11 "2026-02-14T11:58:16Z")

</div>

我通常不会遇到这个问题。不确定为什么！不过，我确实有过不小心发送电子邮件的情况——更常见的是，在发送邮件后我马上会产生疑问（收件人错误？信息遗漏？），我非常庆幸 Gmail 在几秒钟内提供了“撤销发送”链接来解除我的疑虑。但这并不经常发生。

所以，发布时也许可以有类似的功能。发布后有几秒钟的时间可以点击“哎呀，这不该这么发出去”的按钮。

---

<div class="post-metadata">

**Author:** ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)\
**Post date:** [2026年二月14日 12:16 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/12 "2026-02-14T12:16:09Z")

</div>

我经常因为 shift-enter ctrl-enter 快捷键而这样做。

不是大问题，我只是编辑帖子。

对于敏感内容，我先在单独的编辑器中撰写，然后粘贴到应用程序中再发送。

---

<div class="post-metadata">

**Author:** ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)\
**Post date:** [2026年二月15日 13:57 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/13 "2026-02-15T13:57:07Z")

</div>

我使用了我在元（meta）上发布的那个用户脚本，它 **真的** 让我在写作时感到安心！

现在我更希望（比以前更希望）有一个内置的功能 😛

但我看到设计师已经发话了！

![image](https://global.discourse-cdn.com/meta/original/4X/5/a/1/5a116517d81c56ab082fa80b5a273f2ae6c5a1f1.png)

😆

---

<div class="post-metadata">

**Author:** ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Post date:** [2026年二月16日 05:05 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/14 "2026-02-16T05:05:52Z")

</div>

我做了一个简单的TC来实现这个功能，并在编辑器中添加了一个锁定/解锁按钮。

> **[GitHub - NateDhaliwal/discourse-lock-composer](https://github.com/NateDhaliwal/discourse-lock-composer)**
>
> Contribute to NateDhaliwal/discourse-lock-composer development by creating an account on GitHub.

稍后会发布Meta主题。

---

<div class="post-metadata">

**Author:** ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)\
**Post date:** [2026年二月27日 11:23 UTC](https://meta.discourse.org/t/the-awkward-mishap-of-premature-posting/395908/15 "2026-02-27T11:23:56Z")

</div>

通常，我在创建主题后才添加标题，因为这可以防止主题被发布（但这对于回复没有帮助）。

在平板电脑上，屏幕键盘会向上移动编辑器，很容易不小心发布内容。
