关闭选择元素时添加类以选择元素
Add class to select element when select element is closed
当通过jQuery mousedown
事件单击select
元素时,我正在从select
元素中删除一个类。选择菜单关闭后如何重新添加此类?
JSFiddle http://jsfiddle.net/YvCHW/4274/
$("select.desired").mousedown(function(){
$(this).removeClass('desired');
});
select {
margin: 30px 10px;
border: 1px solid #111;
background: transparent;
border: 1px solid #ccc;
padding: 5px 10px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
select.desired {
font-size: 30px;
color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<select class="desired">
<option>Apples</option>
<option class="selected" selected>Pineapples</option>
<option>Chocklate</option>
<option>Pancakes</option>
</select>
愚蠢到可以工作:
$('.special').on('mousedown', function(){
$(this).toggleClass('some');
})
.on('mouseup', function(){
$(this).toggleClass('some');
})
.on('click', function(){
$(this).toggleClass('some');
});
失去焦点的事件处理程序会有所帮助吗?
$("select.desired").focusout(function(){
$(this).addClass('desired');
});
它似乎适用于 JSFiddle(由于某种原因有点滞后......
您可能想尝试聚焦和模糊/更改。
$("select.desired").on("blur change focus", function (evt){
$(this).toggleClass('desired', evt.type!=="focus");
//if (evt.type==="change") $(this).blur();
});
select {
margin: 30px 10px;
border: 1px solid #111;
background: transparent;
border: 1px solid #ccc;
padding: 5px 10px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
select.desired {
font-size: 30px;
color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<select class="desired">
<option>Apples</option>
<option class="selected" selected>Pineapples</option>
<option>Chocklate</option>
<option>Pancakes</option>
</select>
jsFiddle Demo
选择元素有很多事情要做。使用 click 时,它不会在选项上注册,无法将 click 事件附加到选项,并且如果将鼠标向上处理程序放在选择上,但鼠标向下处理程序将选择更改为太小,则鼠标向上永远不会触发,因为元素会更改位置。
不仅如此,选择元素的状态可以根据其焦点、选择或实际更改而更改。它可以更改,也可以在选择后保持不变。所有这些注意到的条件都会导致相当复杂的事件处理。我将所有逻辑放入 jQuery 扩展格式,以便它可以像
$('select.desired').selectToggle('desired');
这是扩展本身
$.fn.selectToggle = function(className){
var
skip = false,
prev = true,
$select = this.change(function(){
$select.addClass(className);
}).blur(function(){
if( !skip ){
$select.addClass(className);
prev = true;
}
});
this.wrap("<span>").mousedown(function(){
$select.toggleClass(className);
skip = true;
$select.blur().focus();
skip = false;
}).click(function(){
if( prev == $select.hasClass(className)){
$select.blur().focus();
}else{
prev = $select.hasClass(className);
}
});
};
这是一个堆栈片段演示,显示了扩展在处理此问题中的给定问题时
$.fn.selectToggle = function(className){
var
skip = false,
prev = true,
$select = this.change(function(){
$select.addClass(className);
}).blur(function(){
if( !skip ){
$select.addClass(className);
prev = true;
}
});
this.wrap("<span>").mousedown(function(){
$select.toggleClass(className);
skip = true;
$select.blur().focus();
skip = false;
}).click(function(){
if( prev == $select.hasClass(className)){
$select.blur().focus();
}else{
prev = $select.hasClass(className);
}
});
};
$('select.desired').selectToggle('desired');
select {
margin: 30px 10px;
border: 1px solid #111;
background: transparent;
border: 1px solid #ccc;
padding: 5px 10px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
select.desired {
font-size: 30px;
color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Click an option:<select class="desired">
<option>Apples</option>
<option class="selected" selected>Pineapples</option>
<option>Chocklate</option>
<option>Pancakes</option>
</select>
http://jsfiddle.net/YvCHW/4276/
$("select.desired").click(function(){
$(this).toggleClass('desired');
});
相关文章:
- WebdriverIO waitForExist()选择元素's选定的选项
- 如何选择元素的第n个子元素
- Angular没有根据模型更新我的选择元素
- jquery使用name from变量按类选择元素
- 如何使用jQuery按数据日期属性选择元素
- 向html选择元素添加选项
- 使用Jquery在相同类型的元素中选择元素
- 他们是如何使用angular/jqLite find()方法按属性名称和值选择元素的?ng conf 2015
- 如何在Angular中清除选择元素中的过滤器
- 使用其中一个元素作为参考点,从Javascript数组中选择元素
- Javascript选择元素到字符串的比较
- Angular始终选择选择元素中的第一个选项
- 使用 jquery .find() 遍历按类和存储属性选择元素
- 通过 id json, jquery 选择元素
- 如何基于另一个已经存在的选择器选择元素
- 禁用多个选择元素中的非“选定”选项,但使用 jquery 的一个除外
- HTML 选择元素的只读等效项
- 在iPad上,如何通过Javascript事件在选择元素上设置focus()而不显示选项
- 单击事件似乎不适用于 IE 中的选择元素
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载