html 布局
<div class="select dowebok">
<span class="placeholder">請選擇</span>
<ul>
<li>醫療</li>
<li>保險</li>
<li>媒體</li>
<li>銀行</li>
</ul>
</div>
css code
.select {
position: relative;
display: block;
margin: 0 auto;
width: 100%;
max-width: 325px;
color: #cccccc;
vertical-align: middle;
text-align: left;
user-select: none;
-webkit-touch-callout: none;
}
.select .placeholder {
position: relative;
display: block;
background-color: #393d41;
z-index: 1;
padding: 1em;
border-radius: 2px;
cursor: pointer;
}
.select .placeholder:hover {
background: #34383c;
}
.select .placeholder:after {
position: absolute;
right: 1em;
top: 50%;
transform: translateY(-50%);
font-family: 'FontAwesome';
content: '\f078';
z-index: 10;
}
.select.is-open .placeholder:after {
content: '\f077';
}
.select.is-open ul {
display: block;
}
.select.select--white .placeholder {
background: #fff;
color: #999;
}
.select.select--white .placeholder:hover {
background: #fafafa;
}
.select ul {
display: none;
position: absolute;
overflow: hidden;
width: 100%;
background: #fff;
border-radius: 2px;
top: 100%;
left: 0;
list-style: none;
margin: 5px 0 0 0;
padding: 0;
z-index: 100;
}
.select ul li {
display: block;
text-align: left;
padding: 0.8em 1em 0.8em 1em;
color: #999;
cursor: pointer;
}
.select ul li:hover {
background: #4ebbf0;
color: #fff;
}
JS code
$('.cooperation-topic .select').on('click', '.placeholder', function(e) {
var parent = $(this).closest('.select');
if (!parent.hasClass('is-open')) {
parent.addClass('is-open');
$('.cooperation-topic .select.is-open').not(parent).removeClass('is-open');
} else {
parent.removeClass('is-open');
}
e.stopPropagation();}).on('click', 'ul>li', function() {
var parent = $(this).closest('.select');
parent.removeClass('is-open').find('.placeholder').text($(this).text());
parent.find('input[type="hidden"]').val($(this).attr('date-value'));
});
$('body').on('click', function() {
$('.cooperation-topic .select.is-open').removeClass('is-open');
});
們在開發項目時候經常會遇到這樣的需求,提供一個可選擇的下拉框,下拉列表中提供了常見的選項。當所提供選項選項無法滿足用戶需求時用戶可以自行輸入所需參數。為了滿足大部分的用戶需求我們可以封裝一個通用組件來滿足多種需求,當調用的組件的時候配置好參數就可以快速實現所需功能了。
圖來自“互聯網”
1,可定義組件寬度,下拉寬度與組件寬度一致;類型number,默認值100;
2,可定義后綴,默認為空;
3,可定義是否只讀,默認為false;
4,可定義下拉列表選項,類型數組,默認為空;
5,可定義輸入框中值顯示位置,分別為居左、居中、居右;分隊對應的可輸入值為left、center、right,默認居中即center。
6,可定義下拉按鈕顯示,類型布爾值,默認為true(顯示)。
這里利用了element中的popover彈出框組件中嵌套下拉列表來實現下拉選項,當選擇下拉選項中的值時將該值賦值給input框中的綁定值。而input框主要使用了些動態樣式并監聽了鼠標獲取焦點、鍵盤輸入、鍵盤刪除、鼠標失去焦點等觸發事件 ,來實時改變輸入框中顯示的值。
這里我用的是scss預處理器,在修改popover組件樣式時我們用到了深度作用選擇器::v-deep,具體的可以參考文章Vue實戰072:CSS樣式中的各種深度作用選擇器的使用,這里需要注意的是控制彈出框與input框的寬度一致,在popover組件上添加一個樣式獲取上級組件的寬度以達到控制彈出窗父級組件的寬度,這樣popover中就可以獲取到父級組件的寬度,再通過深度作用選擇器來定位組件中的DOM元素并進行修改即可。
props中是留給用戶調用組件時配置的參數值,前面文章Vue實戰071:Element實現WEB顏色選擇器功能中有提到過prop傳遞過來的值都是單向下行綁定,子組件不能修改由父組件傳遞過來的值。所以這里我們同樣定義一個變量來接受父級傳遞過來的值,然后通過計算屬性拼接后綴顯示。當選擇下拉選項中的值時將該值在復制給變量,同時監聽顯示值的變化并通過this.$emit將該值傳遞給父級組件。
組件中只有下拉列表必須提供數據的,其他參數都定義了默認值所以可選填。這樣用戶就可以非常靈活的使用該組件了,也大大提高了組件的可使用范圍。這里沒看到組件引入是因為我對組件進行了全局自動化注冊,可以參考文章Vue實戰070:組件的局部注冊和全局注冊(含自動化注冊)功能實現。
以上內容是小編給大家分享的Vue實戰073:可輸入的下拉框組件功能實現,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。更多Vue實戰技巧可以參考專欄:Vue實戰系列,在此也非常感謝大家對小編的支持!
avaweb
在我們日常的javaweb開發過程中呢,會經常遇到獲取表單中的下拉菜單中的value以及他的text,下面我來教大家兩種方法。(推薦第二種哈~,希望大家多多評論點贊呀,上一篇文章中,各位猿媛光想著收藏,都看不到你們給我寫的評論,桑心~~)
假如我們的select長這樣:
<select id="myselect">
<option value="1">test1</option>
<option value="2" selected="selected">test2</option>
<option value="3">test3</option>
</select>
第一種呢是用我們比較常見的JQuery
var $selected = $("#myselect option").filter(":selected");
獲取文本: $selected.text();
獲取value: $selected.val();
第二種呢當然是我們的原生js啦~~(推薦喲,收藏評論哈~)
var e = document.getElementById("myselect");
獲取文本:var text= e.options[e.selectedIndex].text;
獲取value: e.value;
我在后續的文章中,會分享更多更實用的開發小技巧給大家,希望大家多多關注!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。