【问题标题】:Transforming: Select in Radio button using Jquery转换:使用 Jquery 在单选按钮中选择
【发布时间】:2015-10-19 15:34:37
【问题描述】:

我有两个选择元素(第一个是尺寸,第二个是颜色)。我无法在此代码中进行两次调整,我需要帮助来了解如何进行。

首先: 当我选择一个选项(单选按钮)时,我正在使用一个名为“checked”的类。但是问题是当我选择第二个选项(颜色)时,我需要在第一个选项(大小)中保持类“选中”。

第二: 如果不先选择尺寸(第一个选项),用户就不能选择第二个选项(颜色)。所以我需要禁用颜色选项,直到用户选择一个尺寸。

HTML

<select name="iluria-product-variation1" id="iluria-product-variation1" onchange="selectedVariation1()">
<option value="0" id="default-variation-1" selected="selected">Tamanho</option>
<option value="2DE650" class="variation1-option">PP</option>
<option value="2DE651" class="variation1-option">P</option>
<option value="2DE652" class="variation1-option">M</option>
<option value="2DE653" class="variation1-option">G</option>
<option value="2DE654" class="variation1-option">GG</option></select>

<select name="iluria-product-variation2" id="iluria-product-variation2" onchange="selectedVariation2()">
<option value="0" id="default-variation-2" selected="selected">Cor</option>
<option value="2DE655" class="variation2-option">Amarelo</option>
<option value="2DE661" class="variation2-option">Vinho</option>
<option value="2DE660" class="variation2-option">Vermelho</option>
<option value="2DE65F" class="variation2-option">Verde</option>
<option value="2DE65E" class="variation2-option">Roxo</option>
<option value="2DE65D" class="variation2-option">Rosa</option>
<option value="2DE65C" class="variation2-option">Preto</option>
<option value="2DE65B" class="variation2-option">Marrom</option>
<option value="2DE65A" class="variation2-option">Laranja</option>
<option value="2DE659" class="variation2-option">Dourado</option>
<option value="2DE658" class="variation2-option">Cinza</option>
<option value="2DE657" class="variation2-option">Branco</option>
<option value="2DE656" class="variation2-option">Azul</option>
<option value="2DE662" class="variation2-option">Violeta</option>

JS

$('select#iluria-product-variation1, select#iluria-product-variation2').each(function(i, select){
var $select = jQuery(select);
$select.find('option').each(function(j, option){
var $option = jQuery(option);
// Create a radio:
var $radio = jQuery('<input type="radio" />');
// Set name and value:
$radio.attr('name', $select.attr('name')).attr('value', $option.val()).attr('id', $option.text());
// Set checked if the option was selected
if ($option.attr('selected')) $radio.attr('checked', 'checked');
// Insert radio before select box:
    $select.before($radio);
    $radio.wrap('<div class="vari-option fix" />');
// Insert a label:
$radio.before(
    $("<label />").attr('for', $option.text()).text($option.text()).addClass($option.text())
);
    $(".product-variations-container").css("display", "block");
});
}); 

$(':radio').click(function(){
$(this).parent().parent().find('label').removeClass('checked');
$(this).siblings('label').addClass('checked');
$choice = $(this).attr('value');
$('select#iluria-product-variation1 option[value=' + $choice + ']').attr('selected',true).parent().trigger('change');
$('select#iluria-product-variation2 option[value=' + $choice + ']').attr('selected',true).parent().trigger('change');
});

JSFiddle 示例 - http://jsfiddle.net/3kzmq12g/2/

欢迎任何帮助,谢谢!

【问题讨论】:

    标签: jquery select radio-button


    【解决方案1】:

    你可以使用属性选择器和 .on() 方法来实现你想要的,基本上你只需要添加一个 on() 监听器来查看第一组单选按钮是否被选中。

    $('[name="iluria-product-variation2"]').prop('disabled', true); 
    
    $(document).on('click' , 'input[name="iluria-product-variation1"]'  , function(){
        $('[name="iluria-product-variation2"]').prop('disabled', false) 
    });
    
    $('[name="iluria-product-variation2"]').click(function(){
        $('[name="iluria-product-variation2"]').siblings('label').removeClass('checked');
        $(this).siblings('label').addClass('checked');
        $choice = $(this).attr('value');
        $('select#iluria-product-variation1 option[value=' + $choice + ']').attr('selected',true).parent().trigger('change');
        $('select#iluria-product-variation2 option[value=' + $choice + ']').attr('selected',true).parent().trigger('change');
    });
    
    $('[name="iluria-product-variation1"]').click(function(){
        $('[name="iluria-product-variation1"]').siblings('label').removeClass('checked');
        $(this).siblings('label').addClass('checked');
        $choice = $(this).attr('value');
        $('select#iluria-product-variation1 option[value=' + $choice + ']').attr('selected',true).parent().trigger('change');
        $('select#iluria-product-variation2 option[value=' + $choice + ']').attr('selected',true).parent().trigger('change');
    });
    
    $('select#iluria-product-variation1').on('change' , function(){
        $('[name="iluria-product-variation2"]').prop('disabled', true);
    });
    

    FIDDLE HERE

    【讨论】:

    • 这就是我要找的。我尝试了很多方法让代码看起来更好,但我失败了。我只是忘了在我的例子中提到,当用户改变大小时,第二个选择(颜色)应该被禁用(再次)。非常感谢您的帮助。
    • @Geo 编辑了我的答案!按接受答案按钮,如果这是您要查找的内容;),它的勾号!
    • 我可以吻你。非常感谢,我会尽力了解您的所作所为。
    • @Geo,这段代码可以缩短很多,有时间我会重构它,这就是jQuery的美妙之处,通常10-20行代码就可以缩短到 2-3 行代码...这就是 jQuery 的美妙之处,记住这一点。超 :)
    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 2011-08-31
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多