JQuery - 显示/隐藏一组字段

时间:2011-08-27 13:07:51

标签: javascript jquery refactoring hide show

我想使用select的值作为条件来显示或隐藏某些字段。我不想重复自己再次扭曲循环只是为了显示和隐藏字段。我想使用相同的循环代码来显示或隐藏。什么是最好的方法?

hideFields = function () {
    var fields = $(['#foo', '#bar', '#lorem', '#ipsum'])
        showHide = function (action) {
            if (action === 'show' || action === 'hide') {
                action = action + '();';
                fields.each(function (index, value) {
                    $(value).parent()
                        .parent()
                        .action(); // call show||hide here... not working...
                });
            }
        };

    if ($('#select').val() === 'something') {
        showHide('hide');
    }
    else {
        showHide('show');
    }
};

hideFields();

感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用jQuery的toggle()方法来显示和隐藏元素:

$(".fields").toggle();

这样,您不必担心他们的状态,并让jQuery弄清楚是否需要隐藏它们。

您还可以将布尔值传递给仅显示或仅隐藏元素的方法:

$(".fields").toggle(true); // Shows elements, equivalent to show()
$(".fields").toggle(false); // Hides elements, equivalent to hide()

如果你需要做一些额外的逻辑,你总是可以使用$()。css()查询元素的CSS属性,并决定从那里做什么。

答案 1 :(得分:0)

var hideFields = function () {
    var $fields = $('#foo, #bar, #lorem, #ipsum');
    $fields.toggle(!($('#select').val() === 'something'));
};

hideFields();

答案 2 :(得分:0)

我认为这会奏效。确保使用选项:选中以获取选择的值。

function hideFields() {
    var fields = '#foo, #bar, #lorem, #ipsum';
    if ($('#select option:selected').val() === 'something') {
        $(fields).show();
    } else {
        $(fields).hide();
    }
}
hideFields();