【问题标题】:Display results from select dropdown then clone and add another select显示来自选择下拉列表的结果,然后克隆并添加另一个选择
【发布时间】:2013-09-29 03:38:42
【问题描述】:

所以我正在构建两个选择下拉菜单,用户选择并在上面显示值。用户还可以“添加”另一个下拉菜单并从相同的选项中再次选择。

无法克隆 div 以及获取要显示的值。它似乎多次克隆 div。

HTML:

    <div id="exp-display-choice">
    <div class="exp-choices">
        <ul class="choices">
            <!-- display selctions here -->
            <p>Results:</p> 
        </ul>
        <ul class="ad-choices">
            <li>
                <select class="select" id="ad-type">
                    <option value="" selected>Choose Your Pet</option>
                    <option value="Cat">Cat</option>
                    <option value="Dog">Dog</option>    
                    <option value="Wookie">Wookie</option>  
                </select>
            </li>
            <li>
                <select class="ad-size select full-width" id="ad-size">
                    <option value="" selected>Choose Transportation</option>
                    <option value="Planes">Planes</option>
                    <option value="Trains">Trains</option>
                    <option value="Automobiles">Automobiles</option>                            
                </select>
            </li>
        </ul>
    </div><!-- end of exp-choices -->
</div><!-- end of exp-display-choices -->

<a href="javascript:void(0);" class="add-btn button">Add</a>        

JS:

function displayAds(current_select) 
{
var adChoice = current_select.val();
current_select.parents('.exp-choices').find('choices').append('<li>'+adChoice+'</li>');
}

$('.exp-choices').on('change', "option:selected", function()
    {
    displayAds($(this));
    });

$(".add-btn").click(function() 
{   

// grab the last exp-choices in exp-display-choice, clone it, then append to the bottom
var $newExpChoices = $(".exp-choices").parent().children(':last').clone().appendTo($(this).parent().parent());

$newExpChoices.show().insertAfter('.exp-choices');
});

jsfiddle

【问题讨论】:

    标签: javascript jquery html css clone


    【解决方案1】:

    FIDDLE 正在工作,包括元素添加和显示的选择更改

     <div id="exp-display-choice">
            <div class="exp-choices">
                <ul class="choices">
                    <p>Results:<span class="pet_select"></span>  <span class="transportation_select"></span></p>
                </ul>
                <ul class="ad-choices">
                    <li>
                        <select class="select" name="pet_select">
                            <option value="" selected>Choose Your Pet</option>
                            <option value="Cat">Cat</option>
                            <option value="Dog">Dog</option>    
                            <option value="Wookie">Wookie</option>  
                        </select>
                    </li>
                    <li>
                        <select class="ad-size select full-width" name="transportation_select">
                            <option value="" selected>Choose Transportation</option>
                            <option value="Planes">Planes</option>
                            <option value="Trains">Trains</option>
                            <option value="Automobiles">Automobiles</option>                            
                        </select>
                    </li>
                </ul>
            </div><!-- end of exp-choices -->
        </div><!-- end of exp-display-choices -->
    
        <a href="javascript:void(0);" class="add-btn button">Add</a>    
    

    JavaScript:

    $(document).ready(function(){        
    
        // Add button will clone the Ad Type/Size selection
        $(".add-btn").click(function() 
        {   
            var $newExpChoices = $('.exp-choices').last().clone().appendTo($('#exp-display-choice'));
            $newExpChoices.find('.pet_select').text('');
            $newExpChoices.find('.transportation_select').text('');
            $('.exp-choices').on('change', "select", function(){
                displayAds($(this));
            });
        });
    
    
        $('.exp-choices').on('change', "select", function(){
            displayAds($(this));
        });
    });
    
    function displayAds($current_select) 
    {
        var adChoice = $current_select.val();
        //alert(adChoice);
        //alert($current_select.attr("name"));
        $current_select.closest('.exp-choices').find('.' + $current_select.attr("name")).text(adChoice)
    
    }
    

    【讨论】:

    • 这很好用。为了更好地理解,您所做的是在当前选定的上下文中运行 displayAds() 函数,因此使用了 ($this)?
    • 另外,我很好奇这条线到底在做什么:$current_select.closest('.exp-choices').find('.' + $current_select.attr("name ")).text(adChoice)。我对 current_select 到底是什么感到困惑。它没有在任何地方定义。
    • 您的函数 displayAds 保留了一个名为 $current_select 的参数 - 这是触发更改事件的
    • @AlexArt。如果以下答案之一解决了您的问题accept and upvote it
    【解决方案2】:

    您正在使用insetAfter(),它将在目标之后插入匹配元素集中的每个元素。即,在您的情况下,您将相同的克隆元素插入到具有 .exp-choices 类的 DOM 元素中。

    试试:

    var $newExpChoices = $(".exp-choices").parent().children(':last').clone();
    $newExpChoices.show().appendTo($(".exp-choices").parent());
    

    DEMO FIDDLE

    【讨论】:

      【解决方案3】:

      在您的情况下,您可以像这样简单地使用 jquery:

      $("#butttton").on('click',function() {
        $('#tests').clone().appendTo('#rests');
      });
      

      这是供您参考的小提琴:http://jsfiddle.net/EmX7E/4/

      原始 html 中只添加了一个 div。

      <div id="exp-display-choice">
          <div id="rests"></div>
      <div id="exp-display-choice">
          <div id="rests"></div>
          <div class="exp-choices" id = "tests">
              <ul class="choices">
                  <p>Results:</p>
              </ul>
              <ul class="ad-choices">
                  <li>
                      <select class="select" id="ad-type">
                          <option value="" selected>Choose Your Pet</option>
                          <option value="Cat">Cat</option>
                          <option value="Dog">Dog</option>    
                          <option value="Wookie">Wookie</option>  
                      </select>
                  </li>
                  <li>
                      <select class="ad-size select full-width" id="ad-size">
                          <option value="" selected>Choose Transportation</option>
                          <option value="Planes">Planes</option>
                          <option value="Trains">Trains</option>
                          <option value="Automobiles">Automobiles</option>                            
                      </select>
                  </li>
              </ul>
          </div><!-- end of exp-choices -->
      </div><!-- end of exp-display-choices -->
      <button id="butttton">click me</button>
      

      干杯!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多