2010-11-01 223 views
1

當selectedIndex或val使用jQuery進行設置時,是否可以在選擇字段上觸發更改事件?selectedIndex更改後觸發onChange事件?

我試過了,它似乎沒有工作。我試圖用我自己的設計替換一個選擇字段。問題是如果我將更改事件附加到選擇字段,當索引更改時需要觸發該事件。

有沒有辦法做到這一點?

var a = $("a"); 
 

 
$("a").on("click", function() { 
 
    
 
    $("#selectList")[0].selectedIndex = a.index($(this)); 
 
    
 
    //now fire event 
 

 
\t return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#">Trigger 1</a> 
 
<a href="#">Trigger 2</a> 
 
<a href="#">Trigger 3</a> 
 

 
<select id="selectList"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
    <option value="3">3</option> 
 
</select>

編輯: @ xSaint32回答了這個,通過使用jQuery's trigger方法。

+1

@克里斯 - 我有一個類似的問題。我嘗試使用$('theSelectBox')。trigger('change'),但它並不總是會觸發。我結束了將相同的函數綁定到click()事件,並取而代之的是:$('theSelectBox')。trigger('click') – dotariel 2010-11-01 16:03:12

+0

@Chris您可以發佈一些代碼嗎? – lonesomeday 2010-11-01 16:06:14

+0

@lonesomeday:目前我的代碼太長,無法在評論中發佈,並且不會保留編輯中的格式。我會看看我是否可以削減它並添加到編輯。 – 2010-11-01 16:16:03

回答

2

@ xSaint32回答了這個問題,通過使用jQuery's trigger方法。

var a = $("a"), 
 
    select = $("#selectList"); 
 

 
$("a").on("click", function() { 
 
    
 
    select[0].selectedIndex = a.index($(this)); 
 
    
 
    select.trigger("change"); 
 

 
    return false; 
 
}); 
 

 
select.on("change", function() { 
 
    
 
    alert("My index changed"); 
 

 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#">Trigger 1</a> 
 
<a href="#">Trigger 2</a> 
 
<a href="#">Trigger 3</a> 
 

 
<select id="selectList"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
    <option value="3">3</option> 
 
</select>