添加一个事件以在列表项添加到<select> jQuery </select>时捕获

时间:2013-09-11 16:42:50

标签: javascript jquery html

我正在使用jQuery将事件添加到选择(多个)控件。我们的想法是在列表中添加或删除项目时执行此事件。我已经尝试了$("#myselect").change()函数,但这只会在您在列表中选择另一个项时抛出该事件。任何帮助将不胜感激。提前谢谢!

更新

HTML (为此示例自动生成我的ID)

<select id="myselect" style="width: 143px; height: 125px; overflow: scroll;" ondblclick="GipRemoveSelectedItems(ctl00_ctl19_g_f081466b_5035_4884_b6db_009508a22e1c_ctl00_ctl05_ctl01_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLookupPicker_m); return false" onchange="GipSelectResultItems(ctl00_ctl19_g_f081466b_5035_4884_b6db_009508a22e1c_ctl00_ctl05_ctl01_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLookupPicker_m);" multiple="multiple" jQuery172007786130460086404="3"/>

jQuery - $(文件)内部.ready()

$("#myselect").change(function() {
    //Does not enter on add or remove of an item
});

3 个答案:

答案 0 :(得分:8)

您可以使用DOMSubtreeModified事件并检查是否有新元素添加到DOM。即,在您的情况下,新option到特定select

$("#SELECT_ID").bind("DOMSubtreeModified", function() {
    alert("tree changed");
});

DEMO FIDDLE

答案 1 :(得分:7)

您可以收听DOMNodeInserted事件,并检查特定option中的新元素是否为select

检查:How to call a function in every element in the DOM even if they are dynamically created

答案 2 :(得分:2)

请注意,目前的答案已被弃用,以MutationObserver API为准。

现在正确的方法如下:

$select = $('#myselect')
const observer = new MutationObserver(
    () => { $select.trigger('mutated') }
)
observer.observe($select[0], { childList: true })

然后在事件触发器上执行一些操作:

$select.on('mutated', () => { console.log('mutated') })