2016-04-19 87 views
1

我做了一个自定义选择框,当单击一个按钮时可以正常打开。但是,当单击一个按钮时,在同一页面上有多个选择框,所有的选择框都打开。有没有办法做到这一点,而不是每个选择框应用单独的类和多个功能?jQuery多个点击实例

这是我的HTML。

<div class="select-box-wrap"> 
    <select class="select-box" name="mbpanel_layout_section_options[site_layout]"> 
     <option value="1" <?php if(1 == $options['site_layout']) echo 'selected'; ?>>Left Sidebar</option> 
     <option value="2" <?php if(2 == $options['site_layout']) echo 'selected'; ?>>Right Sidebar</option> 
     <option value="3" <?php if(3 == $options['site_layout']) echo 'selected'; ?>>Three Column</option> 
     <option value="4" <?php if(4 == $options['site_layout']) echo 'selected'; ?>>Full Width</option> 
    </select> 
    <input type="button" class="select-click"/> 
</div> 

<div class="select-box-wrap"> 
    <select class="select-box" name="mbpanel_layout_section_options[post_layout]"> 
     <option value="1" <?php if(1 == $options['post_layout']) echo 'selected'; ?>>Left Thumbnail</option> 
     <option value="2" <?php if(2 == $options['post_layout']) echo 'selected'; ?>>Right Thumbnail</option> 
     <option value="3" <?php if(3 == $options['post_layout']) echo 'selected'; ?>>Top Thumbnail</option> 
    </select> 
    <input type="button" class="select-click"/> 
</div> 

这里是jQuery。

(function($){ 
    $(".select-click").click(function() { 
     var size = $('.select-box option').size(); 

     if (size != $(".select-box").prop('size')) { 
      $(".select-box").prop('size', size); 
      $(".select-box").addClass("select-open"); 
     } else { 
      $(".select-box").prop('size', 1); 
      $(".select-box").removeClass("select-open"); 
     } 
    }) 
})(jQuery); 

,这里是一个JSFiddle

回答

2

您需要使用DOM遍历查找与点击的按钮,而不是使用类选择影响元素的所有实例.select-box。试试这个:

(function($) { 
    $(".select-click").click(function() { 
     var $selectBox = $(this).prev('.select-box'); 
     var size = $selectBox.find('option').size(); 
     var sizeDifference = size != $selectBox.prop('size'); 
     $selectBox.prop('size', sizeDifference ? size : 1).toggleClass("select-open", sizeDifference); 
    }) 
})(jQuery); 

Working example

请注意,我还使用了三元表达的改变逻辑稍微使代码更短。

+1

DOM遍历将您的代码与您的html布局配对 - *如果*这是一个问题(在大多数情况下不是),那么您可以使用数据属性“配对”.select-click和.select-box。并找到他们的方式。如果这不是问题,这是一个很好的答案。 –

+0

谢谢。那正是我需要的。如果可能的话,也许你可以进一步帮助。如果点击某个选项,如果页面上的任何其他位置像正常的选择框一样点击,是否有关闭该框的方法? – Mark

+1

你只需要听取'select-box-wrap'元素外部的点击,https://jsfiddle.net/descrs2p/4/ –