あなたの質問には少し間違いがあります:
問題は、ドロップダウンリストで別のアイテムが選択されると、「OnSelectedIndexChanged」イベントのためにページがポストバックすることです。
のため、ページは実際に投稿されていAutoPostBack = "true"
ます。
まず、AutoPostBackをFalseに変更します。
次に、changeイベントとkeypressイベントを別々に処理することをお勧めします。jQueryを使用して変更イベントを処理してからその変更イベント内で送信し、キーダウンとキーのフィルターも処理する場合は、必要な場合にのみ送信できます。
$("#TargetSelect").change(function(event){
console.debug($(this).val());
});
$("#TargetSelect").keydown(function(event){
event.preventDefault();
if(event.which == 13){
$(this).trigger('change');
}else if(event.which == 38){
var idx = this.selectedIndex;
if(idx != 0){
$("#TargetSelect").prop('selectedIndex', idx-1);
}
}else if(event.which == 40){
var idx = this.selectedIndex;
var maxIndex = $('select').children('option').length;
idx += 1;
if(idx < maxIndex){
$("#TargetSelect").prop('selectedIndex', idx);
}
}else{
var $options = $('select').children('option');
$options.each(function(){
if(String.fromCharCode(event.which) == $(this).text().charAt(0)){
var idx = $(this).index();
$("#TargetSelect").prop('selectedIndex', idx);
}
});
}
});
これが(更新された)例です。console.debugをフォームの送信に置き換えると、ゴールデンになります。
複数の選択ボックスがある場合、コードは次のようになります。
$("select").change(function(event){
console.debug($(this).val());
});
$("select").keydown(function(event){
event.preventDefault();
if(event.which == 13){
$(this).trigger('change');
}else if(event.which == 38){
var idx = this.selectedIndex;
if(idx != 0){
$(this).prop('selectedIndex', idx-1);
}
}else if(event.which == 40){
var idx = this.selectedIndex;
var maxIndex = $(this).children('option').length;
idx += 1;
if(idx < maxIndex){
$(this).prop('selectedIndex', idx);
}
}else{
var $options = $(this).children('option');
var $thisSelect = $(this);
$options.each(function(){
if(String.fromCharCode(event.which) == $(this).text().charAt(0)){
var idx = $(this).index();
$thisSelect.prop('selectedIndex', idx);
}
});
}
});
また、入力した文字で始まるエントリが2つある場合は、最後のエントリを選択することに注意してください。ボックスをフィルタリングできるようにコードを変更することができます。
複数のボックスの例