3

我刚开始学习 JS 和 jQuery 并且有一个问题。我想制作一个动态表单,可以使用多个选择器进行复杂化。问题是当我打开 Option1 然后用 option6 和 7 按下另一个选择器时,它会消失,但我希望它可见。我知道问题出在 $('label').hide(); 但我对 jQuery 和 Jscript 很不擅长,以至于我不知道如何进行这项工作。我将不胜感激。

这是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    $('label').hide();
    $('#sel').change(function() {

        var val = $(this).val();

        $('label').hide();

        switch (val){
            case 'option1':
                $('#label1').show();
                break;
            case 'option2':
                $('#label2').show();
                break;
            case 'option3':
                $('#label3').show();
                break;
            case 'option4':
                $('#label4').show();
                break;
            case 'option5':
                $('#label5').show();
                break;

        }
    });

    $('#sel2').change(function() {

        var val = $(this).val();

        $('label').hide();

        switch (val){
            case 'option6':
                $('#label6').show();
                break;
            case 'option7':
                $('#label7').show();
                break;        
        }
    });


    $("input")
        .focus(function () {
            $(this).next("span").fadeIn(1000);
        })
        .blur(function () {
             $(this).next("span").fadeOut(1000);
        });
});
</script>


<style>
label {
    display:block;
}
</style>
</head>

<body>

<form>
    <select id="sel">
        <option value="">- select -</option>
        <option value="option1">Option 1</option>
        <option value="option2">Option 2</option>
        <option value="option3">Option 3</option>
        <option value="option4">Option 4</option>
        <option value="option5">Other</option>
    </select>

    <label id="label1">
        <select id="sel2">
            <option value="">- select -</option>
            <option value="option6">Option 6</option>
            <option value="option7">Option 7</option>
        </select>
    </label>

    <label id="label2" for="option2">Text box label 2
        <input type="text" id="option2" />
    </label>
    <label id="label3" for="option3">Text box label 3
        <input type="text" id="option3" />
    </label>
    <label id="label4" for="option4">Text box label 4
        <input type="text" id="option4" />
    </label>
    <label id="label5" for="option5">Other
        <input type="text" id="option5" />
    </label>

    <label id="label6" for="option6">Text box label 6
        <input type="text" id="option6" />
    </label>
    <label id="label7" for="option8">Text box label 7
        <input type="text" id="option7" />
    </label>


</form>

</body>
</html>
4

3 回答 3

1

您可以使用该slice()方法尝试以下操作:

$('#sel').change(function() {
    var val = this.value.slice(-1); // 1,2,3..
    $('label').slice(0, 4).hide();
    $('#label'+val).show()
});
于 2012-08-21T01:03:22.553 回答
1

当你调用#sel2 时,你每次都隐藏“标签”(包括它自己)。我会将其更改为:

$('#sel2').change(function() {

    var val = $(this).val();

    $('#label6').hide();
    $('#label7').hide();

    switch (val){
        case 'option6':
            $('#label6').show();
            break;
        case 'option7':
            $('#label7').show();
            break;
    }
});
于 2012-08-21T01:08:14.490 回答
1

您只需一个更改功能就可以做到这一点

$('#sel,#sel2').change(function() {
    var $selIndex = $('#sel > option:selected').index(); // <-- store index of first select
    var val = $(this).val().replace('option', ''); // <-- remove options from id
    var $label = $('#label' + val); // <-- use number from options to get correct label
    $('label').not($label).hide(); // <-- hide all labels but current selected
    $('#label1').toggle($selIndex == 1); // <-- show if first select = option1
    $label.show(); // <-- show current selected 
});

http://jsfiddle.net/wirey00/FqX8k/

于 2012-08-21T01:21:27.510 回答