Onclick 不适用于 Toggle 按钮,但与常规 HTML 按钮配合得很好

Onclick not working with Toggle button, but works just fine with a regular HTML button

提问人:Augustine 提问时间:11/12/2023 最后编辑:MrUpsidownAugustine 更新时间:11/14/2023 访问量:46

问:

Onclick 不适用于 Toggle 按钮,但与常规 HTML 按钮配合得很好

这是我的代码:

<!-- This works fine -->
<td>
    <button onclick="updateStatus(<?php echo $comp['id'];?>)" id="statusBtn<?php echo $comp['id'];?>" class="status-btn <?php echo $comp['status']==0?'done':'pending'; ?>">
        <?php echo $comp['status']==0?'Done':'Pending'; ?>
    </button>
</td>

<!-- This doesn't I need the same as above with the below Toggle Button see screenshot -->  
<td>      
    <input type="checkbox" 
        data-toggle="toggle" 
        data-size="small" 
        data-onlabel="Done" 
        data-offlabel="Pending" 
        data-onstyle="success" 
        data-offstyle="warning" 
        onclick="updateStatus(<?php echo $comp['id']; ?>)" <?php echo $comp['status']==0?'done':'pending';?>
        <?php echo $comp['status']==0?'Done':'Pending'; ?> />                                                               
</td>

任何帮助都是值得赞赏的! 谢谢。


从评论中添加:

const updateStatus=function(id) { 
    $.ajax({ 
        type: "POST", 
        url: "do_switch.php", 
        data:{ updateId:id }, 
        dataType: "html", 
        success: function(data){ 
            if(data==1) { 
                $("#statusBtn"+id).text("Pending") } 
            else if(data==0) { 
                $("#statusBtn"+id).text("Done")
            } // change status btn colors 
        } 
    }); 
}

以及:

<td>
    <input type="checkbox" 
        data-toggle="toggle" 
        data-size="small" 
        data-onlabel="Done" 
        data-offlabel="Pending" 
        data-onstyle="success" 
        data-offstyle="warning" 
        value="Done" 
        onclick="updateStatus(<?php echo $comp['id']; ?>)" <?php echo $comp['status']==0?'done':'pending';?> <?php echo $comp['status']==0?'Done':'Pending'; ?> > 
</td>

enter image description here

JavaScript AJAX

评论

0赞 volkerschulz 11/12/2023
它可能是您正在使用的切换按钮库,用于防止 onclick 事件冒泡。您的代码在纯 HTML 中工作得很好。所有点击都会触发该功能。updateStatus
0赞 Augustine 11/12/2023
我不确定使用哪一个,我正在使用 Bootstrap 5。
0赞 Professor Abronsius 11/12/2023
通过注释掉相关的标记部分来尝试不引导
0赞 Augustine 11/12/2023
当我评论 Bootsrap 5 cdn 时,它变成了一个简单的复选框,它工作正常,但我需要它作为切换按钮......这就是我被困住的地方。谢谢。!
0赞 Professor Abronsius 11/12/2023
您似乎没有实际设置输入元素的值checkbox

答:

2赞 volkerschulz 11/12/2023 #1

由于您没有告诉我们您正在使用什么拨动开关库,因此需要进行一些猜测。

这些“开关”通常掩盖了底层的复选框,而这个特定的复选框似乎不会触发复选框。不过,开关应该更改复选框(因此可以通过表单提交提交)。所以我会尝试将 更改为 .click eventchecked stateonclickonchange

编辑:有问题的插件是bootstrap5-toggle

因此,复选框的代码应如下所示:

<input type="checkbox" data-toggle="toggle" data-size="small" data-onlabel="Done" data-offlabel="Pending" data-onstyle="success" data-offstyle="warning" onchange="updateStatus(<?php echo $comp['id']; ?>)" <?php echo $comp['status']==0?'':'checked';?>>

评论

0赞 Augustine 11/12/2023
Bingo@volkerschulz 当我使用 onchange 时,有些东西正在发生变化......这条隧道的尽头肯定会有一些曙光......让我尝试更多..谢谢!
0赞 volkerschulz 11/12/2023
确定。如果您通过编辑问题来提供指向您正在使用的库的链接,这不会有什么坏处。;)
0赞 Augustine 11/12/2023
当然,它们是: <link href=“cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/...” rel=“stylesheet”> <link href=“cdn.jsdelivr.net/npm/[email protected]/css/...” rel=“stylesheet”> <script src=“cdn.jsdelivr.net/npm/[email protected]/js/...> <link href=“cdn.datatables.net/v/bs5/jq-3.7.0/dt-1.13.6/b-2.4.2/...” rel=“stylesheet”>
0赞 Augustine 11/12/2023
我现在遇到了一个问题,虽然 Toggle 正在写入 mysql 表,但当我刷新它时它没有粘住,所有标签都恢复为“待处理”,即使它们在表中是“完成”...:-(
0赞 volkerschulz 11/12/2023
那么链接就是这个:npmjs.com/package/bootstrap5-toggle,有一个带有示例的部分。Events