如何更改knockoutjs中的onClick按钮

Posted

技术标签:

【中文标题】如何更改knockoutjs中的onClick按钮【英文标题】:How to change onClick button in knockoutjs 【发布时间】:2021-12-02 04:01:19 【问题描述】:

我有一个带有一些 css 的 html

<label class="label-checkbox">
    <input type="checkbox" data-bind="click: clickedMultipleServicesButton, checked: checkedMultipleServicesButton, css: checked: true">

    <span style="font-size:14px !important">Test Button</span>
</label>
<style>
    label.label-checkbox 
        cursor: pointer;
    

    label.label-checkbox input 
        position: absolute;
        top: 0;
        left: 0;
        visibility: hidden;
        pointer-events: none;
    

    label.label-checkbox span 
        padding: 8px 11px;
        border: 1px solid #ccc;
        display: inline-block;
        color: #ffffff;
        border-radius: 6px;
        margin: 7px;
        background: #253965;
        user-select: none;
    

    label.label-checkbox input:checked + span 
        box-shadow: inset 1px 2px 5px #777;
        transform: translateY(1px);
        background: #ffd800;
    
</style>

当我删除数据绑定时它可以工作。单击它会将蓝色按钮着色为黄色,并且相反。

但是,当我添加数据绑定时:click 它不再起作用。 我假设我需要在点击事件上动态附加 css 类?

期望的行为: 我想要data-bind="click: someFunction",但是当我点击时,有css行为,并且有功能可以捕捉按钮何时被选中,何时未被选中。

【问题讨论】:

【参考方案1】:

是的,我不确定如何在淘汰赛中操作伪类,但您可以动态添加和删除 CSS 类:

<label class="label-checkbox" >
        <input type="checkbox" data-bind="click: clickedMultipleServicesButton, css: checkedMultipleServicesButton() && 'checked'"/>

        <span style="font-size:14px !important">Test Button</span>
    </label>
    <style>
        label.label-checkbox 
            cursor: pointer;
        

            label.label-checkbox input 
                position: absolute;
                top: 0;
                left: 0;
                visibility: hidden;
                pointer-events: none;
            

            label.label-checkbox span 
                padding: 8px 11px;
                border: 1px solid #ccc;
                display: inline-block;
                color: #ffffff;
                border-radius: 6px;
                margin: 7px;
                background: #253965;
                user-select: none;
            

            label.label-checkbox input.checked + span 
                box-shadow: inset 1px 2px 5px #777;
                transform: translateY(1px);
                background: #ffd800;
            
    </style>

请注意,我将您的 input:checked 变成了 input.checked

视图模型中的代码:

self.checkedMultipleServicesButton = ko.observable(false);
self.clickedMultipleServicesButton = function (e)       
  self.checkedMultipleServicesButton(!self.checkedMultipleServicesButton());

【讨论】:

以上是关于如何更改knockoutjs中的onClick按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何更改保存在反应组件的 useRef 对象中的按钮的 onClick 功能?

如何根据设备宽度更改下载按钮的href和onclick功能

如何使用 onclick 按钮更改悬停颜色

如何在反应js中更改按钮onClick的背景颜色?

使用 OnClick 事件更改场景

如何在卡片内的按钮上进行 onclick 事件:更改卡片背景颜色、按钮背景和文本颜色以及文本内容