1

我有一堆包含输入字段的列表项,当单击列表项时,我想检查子项,这可能吗?

function setupToptions() {
    if ($('ul.top-options input').length) {
        $('ul.top-options li').each(function(){ 
            $(this).removeClass('active');
        });
        $('ul.top-options li input:checked').each(function(){ 
            $(this).parent('li').addClass('active');
        });                
    };
};

$(document).ready(function() {
    // Top options select
    $('ul.top-options li').click(function(){
        setupToptions();
    });
    setupToptions();
});

http://jsfiddle.net/BKgdc/1/

4

5 回答 5

2

您只需要在子输入上设置检查值,如下所示:

$(document).ready(function() {
    // Top options select
    $('ul.top-options li').click(function(){
        $(this).find('input:radio').prop('checked', true); // Add this line     
        setupToptions();
    });
    setupToptions();
});

http://jsfiddle.net/BKgdc/2/

于 2013-03-05T10:51:57.567 回答
1

不是最好的答案(因为我已经改变了一切),而只是另一种没有setupToptions功能的可能解决方案:

$(document).ready(function() {

    $li = $('ul.top-options li');
    $li.click(function() {
        $li.removeClass('active')
        .filter(this).addClass('active').find('input').prop('checked', true);
    });
    $li.filter(':has(:checked)').click();

});

http://jsfiddle.net/BKgdc/4/

于 2013-03-05T10:59:27.083 回答
0

你可以很容易地做到这一点。只需添加此代码。

$("li").click(function(){
    $(this).find("input").attr('checked', 'checked');
});
于 2013-03-05T10:51:51.653 回答
0

您可以添加代码:

$('input', this).attr('checked', 'true');

li点击功能。

jsFiddle

于 2013-03-05T10:52:43.463 回答
0

一个完整的方法是注册click父级的和change单选按钮的。还值得注意的是,这可以在没有 JavaScript 的情况下通过正确使用label... 来实现,但为了这个问题,这里是 JavaScript。

// the click
function setChecked() {
    $('input', this).prop('checked', true).change();
}

// the change
function updateActive() {
    $('ul.top-options li').removeClass('active')
        .find('input:checked')
        .parent()
        .addClass('active');
}

// hooking it together
$(document).ready(function() {
    $('ul.top-options li').click(setChecked).find('input').change(updateActive);
});

jsFiddle 演示

于 2013-03-05T10:54:36.663 回答