使用JQuery控制<select>的打开/关闭

时间:2015-12-30 05:59:13

标签: javascript jquery css html5 css3

我正在创建自定义HTML5&lt; select&gt;菜单。按照设计,我试图根据所选元素更改选择元素的颜色。基本上,当打开菜单并且选择的元素不是第一个时,我需要#555555颜色,并且选择第一个元素时关闭菜单的#c7cacb。 问题出现在用户打开菜单,选择第一个选项,然后再次打开菜单时:所有元素都是#c7cacb。如果我使用jQuery(我没有找到方法)或其他方式(在这里堆栈)获得菜单打开|关闭状态,那么控制颜色会很容易。我怎样才能做到这一点? 这是我的代码: &#13; &#13; $(文件)。就绪(函数(){&#13;   //在css&#13中包装所有选择器以添加:: after   $(&#39; select:not([disabled])&#39;)。wrap(&#39;&lt; label class =&#34; dropdown&#34;&gt;&#39;);&#13 ;   $(&#39;选择[已停用]&#39;)。换行(&#39;&lt; label class =&#34; dropdownDisabled&#34;&gt;&#39;);&#13;   //控制元素的颜色&#13;   $(&#39;选择&#39;)。点击(函数(){&#13;     var thisDropdown = $(this);&#13;     if($(thisDropdown).prop(&#39; selectedIndex&#39;)== 0){&#13;       thisDropdown.css(&#39; color&#39;,&#39;#555555&#39;);&#13;       thisDropdown.click(function(){&#13;         if($(thisDropdown).prop(&#39; selectedIndex&#39;)== 0){&#13;           thisDropdown.css(&#39; color&#39;,&#39;#c7cacb&#39;);&#13;         }&#13;       });&#13;     }&#13;   });&#13; })&#13; / *下拉样式* /&#13; 选择{&#13;   宽度:230px;&#13;   身高:46px;&#13;   背景:#f1f5f8;&#13;   颜色:#c7cacb;&#13;   font-size:16pt;&#13;   填充:3px;&#13;   border:2px solid#d7d6d5;&#13;   border-radius:8px;&#13;   -webkit-appearance:none;&#13;   -moz-appearance:none;&#13;   外观:无;&#13; }&#13; select :: - ms-expand {/ *删除IE * /&#13的下拉箭头;   display:none;&#13; }&#13; .dropdownlabel {display:block; font-size:16pt; margin-bottom:10px;颜色:#d7d6d5}&#13; label.dropdown :: after {/ *添加自定义箭头* /&#13;     内容:&#34; \ e90e&#34;;&#13;     font-family:&#39; icomoon&#39;;&#13;     font-size:8pt;&#13;     颜色:#555555;&#13; 显示:内联块;&#13; 箱尺寸:边界盒;&#13;     margin-left:-32px;&#13;     pointer-events:none; / *让点击通过* /&#13; }&#13; &#13; 选择[禁用] {&#13; 颜色:#c7cacb;&#13; border:2px solid#e4e5e6;&#13; }&#13; &#13; label.dropdownDisabled :: after {&#13;     内容:&#34; \ e90e&#34;;&#13;     font-family:&#39; icomoon&#39;;&#13;     font-size:8pt;&#13;     颜色:#d3d5d7;&#13; 显示:内联块;&#13; 箱尺寸:边界盒;&#13;     margin-left:-32px;&#13;     pointer-events:none; / *让点击通过* /&#13; }&#13; &lt; script src =&#34; https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt; / script&gt;&#13; &lt; label for =&#34; selected&#34; class =&#34; dropdownlabel&#34;&gt;下拉标签&lt; / label&gt;&#13; &lt; select name =&#34; selected&#34;&gt;&#13;   &lt; option value =&#34; s&#34;&gt; None Selected&lt; / option&gt;&#13;   &lt; option value =&#34; s2&#34;&gt; Selected&lt; / option&gt;&#13;   &lt; option value =&#34; s3&#34;&gt;另一个值&lt; / option&gt;&#13; &LT; /选择&GT;&#13; &#13; &#13;

1 个答案:

答案 0 :(得分:2)

你可以通过CSS和一点JavaScript / jQuery实现你想要的。这个想法很简单:

  • 将HTML5 data-属性(例如data-value)添加到具有当前值的select(默认情况下为第一个)。

    <select name="selected" data-value="s">
      <option value="s">None Selected</option>
      <option value="s2">Selected</option>
      <option value="s3">Another value</option>
    </select>
    
  • 使用颜色select设置option#555555的样式。

    select, option { color:#555555; }
    
  • 如果select的{​​{1}}为“s”(第一个选项的值),则将其设为浅灰色:

    data-value
  • 每次选择更改值时,都会更新select[data-value='s'] { color:#c7cacb; }

    的值
    data-value

通过这样做,您将获得所需的效果。以下是使用您的代码的示例:

$("select").on("change", function() { 
  $(this).attr("data-value", $(this).val());
}
$(document).ready(function(){
  // wrap all selectors to add ::after in css
  $('select:not([disabled])').wrap('<label class="dropdown">');
  $('select[disabled]').wrap('<label class="dropdownDisabled">');

  // controlling color of elements
  $("select").on("change", function() {
    $(this).attr("data-value", $(this).val());
  });

})
select {
  width: 230px;
  height: 46px;
  background: #f1f5f8;
  color:#c7cacb;
  font-size: 16pt;
  padding: 3px;
  border: 2px solid #d7d6d5;
  border-radius: 8px;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}

select::-ms-expand {
  display: none;
}

.dropdownlabel {
  display: block; 
  font-size: 16pt; 
  margin-bottom: 10px;
  color: #d7d6d5;
}

label.dropdown::after {
  content: "\e90e";
  font-family: 'icomoon';
  font-size: 8pt;
  color: #555555;
  display:inline-block;
  box-sizing:border-box;
  margin-left: -32px;
  pointer-events:none; /* let the click pass trough */
}

select, option {
  color:#555555;
}

select[data-value='s'] {
  color:#c7cacb;
}

现在当<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <label for="selected" class="dropdownlabel">Dropdown label</label> <select name="selected" data-value="s"> <option value="s">None Selected</option> <option value="s2">Selected</option> <option value="s3">Another value</option> </select>打开或所选选项不是第一个时,颜色将为深灰色;如果所选的选项是第一个,则颜色将为浅灰色。