js实现点击选中,第二次点击取消选中状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js实现点击选中,第二次点击取消选中状态相关的知识,希望对你有一定的参考价值。

是以表格形式呈现的,每一个字都可以点击了。但是不知道怎么实现再次点击取消选中状态

so eazy

我只能告诉你思路~因为我懒的给你打代码

    首先获取到对象~你JS的画用dom

    然后实现第一步,点击选择 通过onclick 事件触发~然后改变得到dom对象的背景颜色style

    第二次点击 也是同一个function,这里要处理一下需要做判断~如果dom里的style的背景颜色是有值的,那么就清空,如果不是则加上背景颜色

追问

我选中后是这样显示的,怎么清空这个选中状态?

追答

$("#0_"+head).css("border","0");

参考技术A 我是先给选中的添加一个其他颜色,比如 在dom的点击事件里先添加一句 tr.className="";
随后添加一句tr.className="color";,color是你在css文件中给tr添加的选中颜色,当第二次点击之前的选中样式就会清空
参考技术B <html>
<head>
</head>
<body>
<div id="aa">ss</div>
</body>
<script>
var $aa = document.getElementById('aa'),
color = 'red',
otherColor = 'black';
$aa.onclick = function() 
this.style.color = color;
swapColor();

function swapColor() 
var temp = color;

color = otherColor;
otherColor = temp;

</script>
</html>

这是一个点击切换文字颜色的小demo,借你参考

参考技术C 加个class 呗 有就清空 ,没得就加上

第二次点击后反应复选框被(取消)选中

【中文标题】第二次点击后反应复选框被(取消)选中【英文标题】:React checkbox get (un)checked after the second click 【发布时间】:2019-11-23 10:46:39 【问题描述】:

下面是列出动态复选框的反应组件部分:

   <div className="pb-4">
       <p>Choose the task owner(s):</p>
       
           peerIds.map(id => 
               if (currentUserId != id)
                   return (
                       <label className="checkbox-inline mr-3">
                           <input onChange=onChange_TaskOwner
                               type="checkbox"
                               name="taskowner"
                               checked=st_taskOwnersId.filter(function (item) return (item == id)).length > 0
                               value=peers[id].id />
                           <span>peers[id].fullName</span>
                       </label>

                   )
           )
       
       <div style= clear: 'both' ></div>
   </div>

在上面的代码中,如果当前 id 已经处于名为 st_taskOwnersId 的钩子状态对象中,我将 checked 设置为 false/true。

我使用hook 存储检查项目的ID,如下所示。 onChange_TaskOwner 函数根据是checked 还是unchecked 来更新st_taskOwnersId

const [st_taskOwnersId, set_taskOwnersId] = useState([] as any);

const onChange_TaskOwner = (event) => 
    event.preventDefault();
    if (event.target.checked)
        set_taskOwnersId([...st_taskOwnersId, event.target.value]);
    else
        set_taskOwnersId(st_taskOwnersId.filter(function (item) 
            return (item != event.target.value);
        ));

代码运行没有错误。唯一的问题是我必须单击两次才能选中/取消选中复选框。我不知道为什么会这样。有什么帮助吗?

【问题讨论】:

我看到的一个问题是您没有在重复元素上设置key。还应该使用some() 而不是filter().length。在迭代次数和内存方面效率更高 尝试使用camelCase!=====,无需声明function,使用短语法。也许放一些沙箱,因为错误可能来自另一个地方...... @charlietfl 感谢您的帮助。我根据两个cmets做了更改,但问题没有解决。不过,我必须点击两次。你看到关于使用hook 的任何问题? 您确认onChange_TaskOwner() 每次都被解雇了吗?如果没有沙盒中可重现的示例,很难提供更多帮助 【参考方案1】:

我相信问题出在onChange_TaskOwner 函数上。您应该删除event.preventDefault(); 调用。

我试图在这个codepen 上重现你的组件,没有event.preventDefault(); 工作正常,如果你添加它,同样的错误开始发生。

【讨论】:

谢谢!虽然不确定why 它的行为与preventDefault 一样。 只需在 codepen 的 onChange 函数中添加 preventDefault ,您就会发现原因。至少,其中之一,不确定。 抱歉,why 在我的评论中缺失 :) 再次感谢!

以上是关于js实现点击选中,第二次点击取消选中状态的主要内容,如果未能解决你的问题,请参考以下文章

jQuery实现radio第一次点击选中第二次点击取消功能(转)

2020-12-01ElementUI的tree实现单选,再次点击取消选中

js怎么实现点击选中,再次点击取消。

js怎样实现button点击它会被选中,再次点击取消选中?

怎么取消选中的checkbox?

黄聪:JQUERY判断操作CHECKBOX选中取消选中反选第二次无法选中的问题