1 回答

TA貢獻1777條經驗 獲得超10個贊
首先:您的 html 無效:options 元素具有 value 屬性,沒有 val,并且該值必須有引號。
所以 <option val=1>1</option>是錯誤的,
而且必須是<option value="1">1</option>
對于事件委托,您需要有一個父元素。
由于您的代碼是關于選擇元素的,因此邏輯父級應該是一個<form>元素。
對于選擇,主要事件是更改事件,而不是點擊事件
最后一點,所有表單元素都必須有一個名稱,這個名稱在提交表單時使用,而不是 id。
在表單中使用 name 屬性的另一個好處是它們可以直接用于引用表單的任何子元素
所以完整的代碼是:
const myForm = document.forms['my-form']
// get any -change- event on all the form
myForm.addEventListener('change', myFunction, false)
// event delegation function
function myFunction(evt)
{
// ignore other cases:
if (!evt.target.matches('select.action')) return
console.clear()
console.log( 'change on :', evt.target.name )
console.log( 'value is', myForm[evt.target.name].value )
}
// disable form submit
myForm.onsubmit =evt=>evt.preventDefault()
<form action="" name="my-form">
<select name="select-1" class="action">
<option value="s1_1"> s1 -1 </option>
<option value="s1_2"> s1 -2 </option>
</select>
<select name="select-2">
<option value="s2_11"> s2 -1 </option>
<option value="s2_12"> s2 -2 </option>
</select>
<select name="select-3" class="action">
<option value="s3_11"> s3 -1 </option>
<option value="s3_12"> s3 -2 </option>
</select>
</form>
添加回答
舉報