"Unvote" a poll

AI 生成的摘要

A discussion about implementing an “unvote” feature in polls on Discourse forums was initiated by MiguelAngelLV. It came to light that currently, users can only change their vote, but not cancel it entirely. zogstrip and codinghorror confirmed this limitation. anon23840344 shared a personal experience where they accidentally voted in a poll while trying to highlight text, further emphasizing the need for the “unvote” feature.

sam suggested that it’s time to implement this feature, and zogstrip agreed. A possible design for the feature was proposed, which included adding a “Remove Vote” button after the “Show results” button.

The feature was implemented by nbianca and tested by bletch, who noticed a small, unintended change where the “Show results” button is always enabled, even when there are no votes. However, bletch later found a simpler solution to their problem and decided not to pursue the issue further.

nbianca then reimplemented the original behavior of the “Show results” button and also confirmed that the method signature of DiscoursePoll::Poll.vote was changed during the refactoring of the poll code.

The “unvote” feature is now available, and it seems to work well, according to bletch.

Is posible remove a vote from a poll?

I only can change my vote, but I can’t “cancel”

4 个赞

Not sure if that is possible at the current time.

1 个赞

Nope, there’s currently no way to “unvote” on a poll. Added to my :pencil:

8 个赞

这必须实现,拜托了!我只是想高亮显示投票的文本以便复制/粘贴(顺便说一句,我不明白为什么这不被允许),结果我误投了票。

1 个赞

你可以这样做,要么重新投票,要么在某些情况下有一个取消投票按钮,不确定这是插件还是现在可用的功能。

我不想投票给其他选项。我只是在弃权。我只希望点击并拖动以选中文字,然后复制粘贴。

你好,关于此事有任何消息吗?我收到一位用户的投诉,他无法取消自己在投票中的公开选择。

相关主题:Ability to remove my choice in a poll

我仍然认为没有可行的方法,@zogstrip 或许值得将此任务分配出去,因为我们早就打算做了。

  • 1
  • 2
  • 3
0 voters

也许 @designers 首先要确定的是,我们是否要无条件地允许此功能,还是仅针对特定的投票允许?

5 个赞

我同意,是时候了。

@nbianca 你能把这个加到你的列表里吗?

1 个赞

哦,我想我们只需要操作这个屏幕:

在“显示结果”按钮后添加一个“移除投票”按钮。

这不会影响投票的渲染方式,您需要深入查找选项。

2 个赞

我在插件中大量使用投票功能来收集结构化的用户输入,因此这对来说将是一个很好的改进。

能否请求在移除投票时仍然触发投票事件,以便我知晓发生了变更?

3 个赞

我已在以下地址实现了取消投票功能:

10 个赞

你好,我刚将最新构建拉取到我的开发环境进行测试,发现了一个小的、或许非预期的变更。

这是一个细微的改动,但由于我使用投票功能的特殊方式,这对我来说意义重大。

以前,如果投票中没有选票,“显示结果”按钮会被禁用。这很合理,因为没有结果可看,所以“显示结果”按钮不应可点击。它看起来是这样的…


注意:没有收到任何投票,“显示结果”按钮处于禁用状态

在新的“取消投票”构建中,似乎无论是否有投票,“显示结果”按钮始终处于启用状态。


注意:没有收到任何投票,但“显示结果”按钮处于启用状态

有几个问题:情况确实如此吗?这是有意为之还是疏忽?你们会改回来吗?

如果保持现状,我会尝试另一种方法来实现我期望的结果。

无论如何,感谢“取消投票”功能,它看起来运行得非常顺利!

背景

背景…

为什么这对我来说是个问题?我使用投票来收集(主要是)单个用户的输入。也就是说,投票允许我在特定上下文中向单个用户提出具体问题。投票中很少有多于一张选票,但它们使得收集结构化数据变得非常容易。

在我的插件中,一个主题可以包含多个投票,这些投票可以包含大量选项,这意味着需要大量滚动。为了方便用户导航,一旦用户投票,我编写的一个主题组件会从投票 UI 中移除其他选项,只保留他们选择的选项。

为了移除这些选项,我的主题组件会定位一个已启用的“显示结果”按钮并“点击”它。一旦结果显示出来,任何没有收到选票的选项都会被移除。

最终效果如下。

目前,由于“显示结果”按钮默认处于启用状态,我的代码会点击它。由于没有任何投票,所有选项都被移除,看起来是这样的…

我刚刚重新思考了这个问题,既然结果现在总是显示出来,我意识到可以用一种简单得多的方式来实现我的目标。

所以请保持原样!LOL :upside_down_face:

我只需选中目标(或非 .chosen)的结果元素,并将它们设置为不显示。

div.poll div.poll-container ul.results > li:not(.chosen) {
    display: none;
}

当我几年前编写这段代码时,我可能没有注意到 .chosen 类,或者这是最近才添加的?

无论如何,我之前的实现明显过度设计了(轮询 JavaScript!),而这段代码似乎就能满足我的需求。

6451AF5C-2351-49E0-9A1F-C6C0A3D0D5E9

再次感谢。

1 个赞

哦,这是我的疏忽。我刚刚重新实现了它,很快就会上线:

我认为这种情况已经持续一段时间了。

3 个赞

现在正在测试,@nbianca,按钮现在看起来和以前一样工作了。谢谢!

还有一个问题,我使用 DiscoursePoll::Poll.vote 方法来自动对投票进行投票。我在代码中遇到了一些问题。能否确认在重构投票代码时,您更改了方法签名?

我的代码 原本 假设的签名是:

def vote(post_id, poll_name, options, user)

而在您的更改之后,签名现在似乎是:

def self.vote(user, post_id, poll_name, options)

即 user 参数原本在第 4 位,现在变成了第 1 位,其他所有参数都随之移位。

能否验证上述假设是否正确?您认为是否还有其他类似的重构更改可能会让我遇到问题?

顺便一提,投票移除功能似乎运行良好!

您说得对。我将 user 移动为大多数函数的第一个参数,因为这是我们通常遵循的约定。

3 个赞

此主题在 9 天后自动关闭。不再允许新的回复。