2013-05-10 70 views
0

所以我有一對<select>框,並有一個jQuery腳本來將選定的<option>從一個選擇框轉移到另一個選擇框。我也有一個相反的功能。這工作正常,除非我把<option> s放回到第一個<select>,它們被追加到底部而不是像以前一樣按字母順序排列。在jQuery事件中調用函數不起作用

所以我發現this question此功能提供:

function sortSelect() { 
    var options = $('#inactiveTickers option'); 
    var arr = options.map(function(_, o) { 
     return { 
      t: $(o).text(), 
      v: o.value 
     }; 
    }).get(); 
    arr.sort(function(o1, o2) { 
     return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; 
    }); 
    options.each(function(i, o) { 
     console.log(i); 
     o.value = arr[i].v; 
     $(o).text(arr[i].t); 
    }); 
} 

然後,我有這個jQuery捕獲click事件中的鏈接ID爲#remove

$('#remove').click(function() { 
    return !$('#activeTickers option:selected').remove().appendTo('#inactiveTickers'); 
    sortSelect(); 
    }); 

所以在第一線函數執行<option>標記的移動,第二個函數應該調用sortSelect函數。 麻煩的是我不認爲調用sortSelect函數(控制檯日誌中沒有任何內容,函數應該寫入它)。我的代碼有什麼問題?

+0

你'return'在第一線,執行結束還有... – tpeczek 2013-05-10 10:43:00

+0

此外,你的'sortSelect'功能只有各種'選擇#inactiveTickers' - 你可能要做出一個參數,以及.. – techfoobar 2013-05-10 10:44:43

+0

@techfoobar是的,我會把它作爲一個參數,只是想讓它首先工作。謝謝 – harryg 2013-05-10 10:53:38

回答

1

當您使用它們返回時,函數會停止。我不明白你爲什麼使用回報做這件事,考慮到appendTo()不會返回任何東西(順便說一句,你不需要return什麼)。只要做到

$('#remove').click(function() { 
$('#activeTickers option:selected').remove().appendTo('#inactiveTickers'); 
sortSelect(); 
}); 
+1

太好了,謝謝。那樣做了 – harryg 2013-05-10 10:51:33

2

這是因爲在調用sortSelect之前,您已經返回一些值,函數調用在return行結束。只要不要返回任何東西或將值放入變量中並在調用sortSelect後返回。

$('#remove').click(function() { 
    var ret = !$('#activeTickers option:selected').remove().appendTo('#inactiveTickers'); 
    sortSelect(); 
    return ret; 
}); 
+0

謝謝,你的方法可能有效,但@steo表示,第一行不會返回任何最好的東西,只是爲了不返回就調用它。 – harryg 2013-05-10 10:52:26