問題1:連續兩次點擊同一個option
時,不能觸發change
事件。(value值沒有發生改變)
change
事件:在元素數據發生變化時觸發。該事件適用於文本域(text field)
,以及textarea
和select
元素。
當用於select
元素時,change
事件會在選擇某個選項時發生。當用於text field
或textarea
時,該事件會在元素失去焦點時發生。
原因:因為select
下的option
標簽是監聽不到點擊事件的,只能監聽select
的點擊事件。
解決:用點擊事件去監聽(但是這里不能監聽option
的點擊事件:因為select
下的option
標簽是監聽不到點擊事件的,只能監聽select
的點擊事件。),所以這個解決方法pass。
問題2:當點擊select
打開下拉框時,會觸發click
事件,再次點擊某個option
時會觸發第二次click事件。
解決:定義一個變量,初始值為0,點擊的時候判斷是否為第二次點擊
target
事件屬性:
targe
t事件屬性返回觸發事件的元素。
target
屬性獲取最初發生事件的元素,currentTarget
屬性始終引用事件偵聽器觸發事件的元素。
tagName
是DOM對象
的屬性,用於獲取DOM對象
的標簽名,取出來是大寫的,nodeName
,取出來的是小寫的。
寫法:變量.target.tagName
問題3:頁面加載完成自動觸發事件()。
option
標簽有個selected
屬性,可以設置默認的選中項(僅僅只是設置一個數值),不能觸發change
事件,改變選中項select
也不能觸發change事件,click
也不能觸發change
事件。
解決:頁面需要默認的事件,在設置完selected
屬性或value
后,需要用trigger
方法來自動觸發事件。
trigger()
方法:jQuery事件-trigger()方法
定義和用法:tigger()方法觸發被選元素的指定事件類型
問題4::選擇option
后,需要再點擊一次select
才能觸發事件。
解決:從chenge
事件入手。連續選擇同一個option
時,select
的value
值沒有發生變化,所以不能觸發change
事件。所以可以設置在每次點擊select
展開option
前,把select
的value
的值變為-1(不是已有的value的值),就能觸發change
事件,因此,不能用,使用click
事件focus
事件。
這樣做,在下一次點擊select
時,select
框內的值會被清空
優化解決:設置一個隱藏的option
用來存放選中的值,select
獲取焦點的時候(focus)
框內的值不會被清空
<div class="main">
<select name="" id="" class="select">
<option value="1">111</option>
<option value="2">2222</option>
<option value="3">33333</option>
<option value="4">444444</option>
</select>
</div>
$('.select').on('change',function(){
var val = $(this).val();
console.log('請求服務端數據' + val); //控制台輸出
$(this).blur();
}).on('focus',function(){
$(this).val(-1);
})
優化后:
<div class="main">
<select name="" id="" class="select">
<option value="1">111</option>
<option value="2">2222</option>
<option value="3">33333</option>
<option value="4">444444</option>
<option value="5" style="display: none;"></option>
</select>
</div>
$('.select').on('change',function(){
var val = $(this).val();
console.log('請求服務端數據' + val);
$(this).blur();
}).on('focus',function(){
var selectText = $(this).find('option:selected').text(); //獲取select框內的值
$(this).find('option[value=5]').text(selectText) //將獲取的值存入隱藏的option中
$(this).val(5); //輸出隱藏的option值(select框內的值不會在下一次點擊時消失)
})
原生js獲取select值的方法:
var obj = document.getElementById('select');
//獲取選中項的索引
var idx = obj.selectedIndex;
//獲取選中項的文本
var text = obj.options[index].text;
//獲取選中項的value值
var value = obj.options[index].value;
參考:
<option>中的hassubinfo是什么?
<option hassubinfo="true"></option>
hassubinfo:是否有子信息