【问题标题】:How can I unify text that take from multiple group radio button?如何统一来自多个组单选按钮的文本?
【发布时间】:2017-06-21 11:35:53
【问题描述】:

我的javascript代码是这样的:

$(function(){
    $('input[type="radio"]').click(function(){
        var txt = $(this).parent().text();
        var $radio = $(this);
        if ($radio.data('waschecked') == true)
        {
            $radio.prop('checked', false);
            $radio.data('waschecked', false);
            $('#result-select').text('');
        }
        else{
            $radio.data('waschecked', true);
            $('#result-select').text(txt);
        }
        $radio.siblings('input[type="radio"]').data('waschecked', false);
    });
});

演示和完整代码如下:https://jsfiddle.net/oscar11/m7by6zcw/21/

我想:

如果我选择切尔西、马德里和尤文,结果是这样的:

切尔西 - 马德里 - 尤文

如果我选择切尔西和马德里,结果如下:

切尔西 - 马德里

所以如果我选中单选按钮,它会显示文本。如果我取消选中单选按钮,它不会显示文本

我该怎么做?

更新

单选按钮可以取消选中

例如:

如果我选择切尔西、马德里和尤文,结果是这样的:

切尔西 - 马德里 - 尤文

然后我取消选中马德里,结果是这样的:

切尔西 - 尤文

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    更新小提琴:https://jsfiddle.net/m7by6zcw/37/

    基本上像 Justinas 的回答,但可以选择/取消选择。

    我真正改变的唯一部分是文本的输出方式,如下所示:

        let output = [];
        $('input[type="radio"]:checked').each( function() {
                var txt = $(this).parent().text();
                output.push(txt);
        });
        $('#result-select').text(output.join(' - '));
    

    检查时需要重置其他所有数据:

    $(`input[name=${name}]:not(:checked)`).data('waschecked', false);
    

    【讨论】:

    • 太棒了。有用。但仍有不足之处。例如:你选择切尔西,然后选择穆,然后选择阿森纳。然后再次选择切尔西。再次选择切尔西时,必须点击2次。应该是当再次选择/点击切尔西时,单选按钮直接选中而无需点击2次
    • 好吧,您没有为未检查的内容实施重置。我已经更新了。
    • 似乎有效。但为什么它使用let?如果我改用var,可以吗?因为在我的项目中,如果使用let,会报错
    • 是的,只需要用老式的方式进行字符串连接:"input[name="+name+"]:not(:checked)"
    • 大声笑我想我真的必须把它拼出来。 $("input[name=\""+name+"\"]:not(:checked)")抱歉我有时懒得解释
    【解决方案2】:

    您必须从:checked 单选按钮收集所有值,稍后使用.join 将数组转换为字符串并放置到结果字段

    $(function(){
        $('input[type="radio"]').click(function(){
          var result = $('#result-select');
          var results = [];
    
          $('input[type="radio"]:checked').each(function () {
            results.push($(this).closest('label').text());
          });
          
          result.text(results.join(' - '));
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="col-md-4">
        <ul class="list-unstyled">
            <li><strong>England</strong></li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="england" class="radio"> Chelsea
                    </label>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="england" class="radio"> Mu
                    </label>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="england" class="radio"> Arsenal
                    </label>
                </div>
            </li>
        </ul>
    </div>
    <div class="col-md-4">
        <ul class="list-unstyled">
            <li><strong>Spain</strong></li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="spain" class="radio"> Madrid
                    </label>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="spain" class="radio"> Barcelona
                    </label>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="spain" class="radio"> Atletico
                    </label>
                </div>
            </li>
        </ul>
    </div>
    
    <div class="col-md-4">
        <ul class="list-unstyled">
            <li><strong>Italy</strong></li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="italy" class="radio"> Juve
                    </label>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="italy" class="radio"> Milan
                    </label>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="radio" name="italy" class="radio"> Inter
                    </label>
                </div>
            </li>
        </ul>
    </div>
    
    <span id="result-select">Result</span>

    【讨论】:

    • 在您的代码中,一旦您选中某个组(例如意大利)的单选按钮,它将始终被选中,结果始终是来自意大利的团队!
    • @Justinas,也许你可以帮助我。看看这个:stackoverflow.com/questions/46824649/…
    【解决方案3】:

    您需要首先获取结果的文本值:var str = $('#result-select').text();,然后当您选中单选按钮时,只需将该值附加到结果文本str += txt; $('#result-select').text(str);

    如果取消选中单选按钮,只需将其值替换为空字符串 str = str.replace(txt,'');

    $(function(){
        $('input[type="radio"]').click(function(){
            var txt = $(this).parent().text();
            var $radio = $(this);
    
            // if this was previously checked
            if ($radio.data('waschecked') == true)
            {
                $radio.prop('checked', false);
                $radio.data('waschecked', false);
                var str = $('#result-select').text();
                str = str.replace(txt,'');
                $('#result-select').text(str);
            }
            else{
                $radio.data('waschecked', true);
                var str = $('#result-select').text();
                str += txt;
                $('#result-select').text(str);
            }
    
            // remove was checked from other radios
            $radio.siblings('input[type="radio"]').data('waschecked', false);
        });
    });
    

    【讨论】:

    • 解释你有什么改变。
    • 啊,好吧,这是我的错,我不明白你想要什么!现在对我来说更清楚了,祝你好运:)
    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 2019-07-15
    • 2017-05-09
    • 2021-01-26
    • 2016-06-12
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    相关资源
    最近更新 更多