【问题标题】:show/hide form depending on dropdown根据下拉菜单显示/隐藏表单
【发布时间】:2013-07-02 22:22:33
【问题描述】:

我试图根据 Dropbox 选择显示一种特定形式。这是我到目前为止所拥有的: HTML:

                <select id='selector'>
                    <option value='option-1' id="opt1">Option 1</option>
                    <option value='option-2' id="opt2">Option 2</option>
                    <option value='option-3' id="opt3">Option 3</option>
                </select>



                <form action="" method="post" id="form1" class="form">
                    <input id="input_1" name="input_1" type="text"/>
                    <input id="input_2" name="input_2" type="text"/>
                    <input id="input_3" name="input_3" type="text"/>
                </form>​

                <form action="" method="post" id="form2" class="form">
                    <input id="input_4" name="input_1" type="text"/>
                    <input id="input_5" name="input_2" type="text"/>
                    <input id="input_6" name="input_3" type="text"/>
                </form>​

                <form action="" method="post" id="form3" class="form">
                    <input id="input_7" name="input_1" type="text"/>
                    <input id="input_8" name="input_2" type="text"/>
                    <input id="input_9" name="input_3" type="text"/>
                </form>​

和jquery:

    $select.change(function(){
        if($(this).val() == "opt1"){
            if($('#form1').is(":hidden")){
                $('#form1').show();            
            }        
            $('#form2').hide();
            $('#form3').hide(); 
        }
        if($(this).val() == "opt2"){
            if($('#form2').is(":hidden")){
                $('#form2').show();            
            }
            $('#form1').hide();
            $('#form3').hide(); 
        }
        if($(this).val() == "option3"){
            if($('#form3').is(":hidden")){
                $('#form3').show();            
            }
            $('#form1').hide();
            $('#form2').hide(); 
        }     
    });

我想将它用于不同的联系人类型,例如。 “获取报价”、“一般查询”、“发布反馈” - 除非您对此有更好的想法。感谢您的时间和帮助。

jsfiddle:here

这里的问题是这不起作用。它同时显示所有表单,#selector 根本不会影响任何表单的可见性。

【问题讨论】:

  • 我没有得到这里的问题:O/
  • @cacho - 这行不通。我试图弄清楚它有什么问题,但它只是不起作用。它显示所有表单,根据下拉菜单的选择,它应该只显示 1 个。
  • @cacho 我已经更新了 jsfiddle jsfiddle.net/tucado/cBCTm/1
  • 您对 id 而不是值的测试...也有点乱

标签: jquery forms select


【解决方案1】:

我想这就是你所追求的 -

$(function() {
    var $select = $("#selector");
    $select.change(function () {
        if ($('#selector option:selected').attr("id") == "opt1") {
            if ($('#form1').is(":hidden")) {
                $('#form1').fadeIn(400);
            }
            $('#form2').hide();
            $('#form3').hide();
        }
        if ($('#selector option:selected').attr("id") == "opt2") {
            if ($('#form2').is(":hidden")) {
                $('#form2').fadeIn(400);
            }
            $('#form1').hide();
            $('#form3').hide();
        }
        if ($('#selector option:selected').attr("id") == "opt3") {
            if ($('#form3').is(":hidden")) {
                $('#form3').fadeIn(400);
            }
            $('#form1').hide();
            $('#form2').hide();
        }
    });
});

jsfiddle - http://jsfiddle.net/RY2vD/

/编辑

这是我将如何处理这个问题(一点重构) -

$(function () {
    hideForms();
    $("#form1").show();
    $("#selector").change(function () {
        hideForms();
        if ($('#selector option:selected').attr("id") == "opt1") {
            $('#form1').fadeIn(400);
        } else if ($('#selector option:selected').attr("id") == "opt2") {
            $('#form2').fadeIn(400);
        } else {
            $('#form3').fadeIn(400);
        }
    });
});

function hideForms() {
    $(".form").hide();
    // maybe some other stuff to do here
}

http://jsfiddle.net/xpL49/3/

【讨论】:

  • 不客气,喜欢的可以标记为答案:~)
  • 我会的。有没有办法不只是显示正确的形式 - 淡入淡出?只是想试试它的样子。
  • 当然,我添加了淡入淡出。您可以传递一个整数,表示完成淡入淡出所需的毫秒数。
  • 干得好。我知道 ms :) 但谢谢。我确实从中了解了一切,但是从头开始构建某些东西与重新创建或理解它之间存在很大差异。非常感谢。
  • 我希望我的问题对其他人有用。
【解决方案2】:

HTML

<select id='selector' onload="typeres()" onchange="typeres()">
   <option value='option-1' id="opt1">Option 1</option>
   <option value='option-2' id="opt2">Option 2</option>
   <option value='option-3' id="opt3">Option 3</option>
</select>



            <form action="" method="post" id="form1" class="form">
                <input id="input_1" name="input_1" type="text"/>
                <input id="input_2" name="input_2" type="text"/>
                <input id="input_3" name="input_3" type="text"/>
            </form>​

            <form action="" method="post" id="form2" class="form">
                <input id="input_4" name="input_1" type="text"/>
                <input id="input_5" name="input_2" type="text"/>
                <input id="input_6" name="input_3" type="text"/>
            </form>​

            <form action="" method="post" id="form3" class="form">
                <input id="input_7" name="input_1" type="text"/>
                <input id="input_8" name="input_2" type="text"/>
                <input id="input_9" name="input_3" type="text"/>
            </form>

Javascript 和 jQuery

function typeres(){
  $('.form').css('visibility','hidden');
  var e=document.getElementById("selector");
  if(e.options[e.selectedIndex].value=="option-1"){
      $('#form1').css('visibility','visible');
  }else if(e.options[e.selectedIndex].value=="option-1"){
      $('#form2').css('visibility','visible');                                             
  }else{
      $('#form3').css('visibility','visible');
  }
}  

希望这可能会有所帮助..

【讨论】:

  • 你可以使用 $('#form1').css('visibility','visible'); 而不是 $('#form1').fadeIn(slow); 和 fadeOut() 来产生一些效果
  • 在 jsfiddle 中也尝试了这个,但效果不佳,也许我做错了什么:jsfiddle.net/tucado/RY2vD/3
  • 这很好,如果是,则在第二秒内检查'option-2'
  • @Ross - 我错过了。那么它工作正常。唯一的事情是在 opt1 和 opt2 之后留下一个空白,而不是替换实际的形式。所以我真正想要的是在#selector 下有一个表格。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多