mysql 第二次单击时取消选中单选按钮

91zkwejq  于 2023-06-21  发布在  Mysql
关注(0)|答案(8)|浏览(142)

我有很多单选按钮,从我的数据库中获取一个值,如果它设置为“1”,我使单选按钮选中。
如果一个单选按钮被选中,并且用户再次单击它,我仍然希望能够清除这个按钮。有人有主意吗?
$radio1从数据库中获取数据,值为0、1或2

<input value="1" name="radio1" type="radio"<?php if($radio1==1){echo " checked";} ?>>
<input value="2" name="radio2" type="radio"<?php if($radio1==2){echo " checked";} ?>>

**Varun Malhotra的答案略有修改:**我修改了两行代码,对我来说更好。但总的来说,Varun的回答是完美的!

$('input[type="radio"]').click(function(){
    var $radio = $(this);

    // if this was previously checked
    if ($radio.data('waschecked') == true)
    {
        $radio.prop('checked', false);
        $radio.data('waschecked', false);
    }
    else
    {
         $radio.prop('checked', true);
         $radio.data('waschecked', true);
    }

    // remove was checked from other radios
    $radio.siblings('input[type="radio"]').data('waschecked', false);
});
qxgroojn

qxgroojn1#

我建议添加一个自定义属性来跟踪每个收音机的先前状态,如下所示:

$(function(){
    $('input[name="rad"]').click(function(){
        var $radio = $(this);

        // if this was previously checked
        if ($radio.data('waschecked') == true)
        {
            $radio.prop('checked', false);
            $radio.data('waschecked', false);
        }
        else
            $radio.data('waschecked', true);

        // remove was checked from other radios
        $radio.siblings('input[name="rad"]').data('waschecked', false);
    });
});

您还需要将此属性添加到最初选中的单选标记中

<input type="radio" name="rad" id="Radio0" checked="checked" data-waschecked="true" />

JSFIDDLE DEMO
更新:

$(function(){
        $('input[name="rad"]').click(function(){
            var $radio = $(this);

            // if this was previously checked
            if ($radio.data('waschecked') == true)
            {
                $radio.prop('checked', false);
                $radio.data('waschecked', false);
            }
            else
                $radio.data('waschecked', true);

            // remove was checked from other radios
            $radio.siblings('input[type="radio"]').data('waschecked', false);
        });
    });

但是一定要确保你没有其他的radio-group来工作,否则你必须提供一些属性来指定这些按钮,比如我前面提到的name prop。

7z5jn7bk

7z5jn7bk2#

这应该比其他解决方案更普遍地工作,因为它处理所有无线电不在同一父中的情况。

var $radios = $('input[type="radio"]');
$radios.click(function () {
  var $this = $(this);
  if ($this.data('checked')) {
    this.checked = false;
  }
  var $otherRadios = $radios.not($this).filter('[name="'
                                               + $this.attr('name') + '"]');
  $otherRadios.prop('checked', false).data('checked', false);
  $this.data('checked', this.checked);
});
6qqygrtg

6qqygrtg3#

第一次单击时,在单击之前触发更改事件。你可以用它们。使用许多单选按钮组,即使您已预先选中单选按钮。

$("input[type=radio]").each(function() {
    var secondClick = true;
    $(this).change(function() {
        secondClick = false;
    });
    $(this).click(function() {
        if (secondClick) {
            $(this).prop("checked", false);
        }
        secondClick = true;
    });
});

JSFIDDLE DEMO

t9eec4r0

t9eec4r04#

以下是我的解决方案,它适用于触摸设备以及鼠标点击:

$('input[type=radio]').bind('touchstart mousedown', function() {
    this.checked = !this.checked
}).bind('click touchend', function(e) {
    e.preventDefault()
});

https://codepen.io/robbiebow/pen/bjPvEO

brvekthn

brvekthn5#

试试这个

$('input[name="rad"]').click(function(){
                    var $radio = $(this);
                    // if this was previously checked
                    if ($radio.data('waschecked') == true)
                    {
                        $radio.prop('checked', false);
                        $radio.data('waschecked', false);
                    }
                    else{
                        $radio.data('waschecked', true);
                    }
                    // remove was checked from other radios
                    $('input[name="rad"]').not($(this)).data('waschecked', false);
                });
h7wcgrx3

h7wcgrx36#

$("input[type=radio]").on('click', function () {
    if ($(this).is(':checked')) {
        $(this).prop("checked", false);
    } else {
        $(this).prop("checked", true);
    }
});
wvt8vs2t

wvt8vs2t7#

我不知道为什么,但是用户softvar选择的答案对我不起作用,所以我在尝试了大约两个小时后,根据softvar的答案得出了以下答案。把它放在这里,以防它可能会帮助其他人。您可以根据从数据库中获得的“selected”值,在HTML中将“data-active”指定为0或1。

<input type="radio" name="user" value="1" data-active="0"> User 1
<input type="radio" name="user" value="2" data-active="0"> User 2

和/或

$('input[name="user"]').on('click', function() {
    if ($(this).data('active') == 0) {
        $('input[name="user"]').data('active', 0);
        $(this).data('active', 1);
    } else {
        $(this).data('active', 0);
        $(this).prop('checked', false);
    }
});
vojdkbi0

vojdkbi08#

这是我的通用解决方案。即使有多组单选按钮也有效。例如,如果您有多组具有相同“name”属性的按钮。很管用。

const radioButtons = document.querySelectorAll('input[type="radio"]')

if (radioButtons) {
    radioButtons.forEach(button => {
        let nameAttribute = button.getAttribute('name')
        
        button.onclick = function () {
            let isChecked = this.getAttribute('is_checked')
            
            if (isChecked === 'false' || !this.hasAttribute('is_checked')) {
                this.setAttribute('is_checked', 'true')

                const radioButtonsArray = Array.from(radioButtons)
                const radioButtonsSameName = radioButtonsArray.filter( radioButton => {
                    
                    if (!radioButton.checked) {
                        return radioButton.getAttribute('name') === nameAttribute
                    }
                })

                radioButtonsSameName.forEach(radioButtonSameName => {
                    if (radioButtonSameName.getAttribute('is_checked')) {
                        radioButtonSameName.setAttribute('is_checked', 'false')
                    }
                })
            }
            else {
                this.checked = false
                this.setAttribute('is_checked', 'false')
            }
        }
    })
}

相关问题