2011-07-20 7 views
6

私はhtmlページを設計しています。 jqueryまたはjavascriptを使用してドロップダウン要素の変更に関する確認メッセージを表示します。 これを手伝ってください。ドロップダウンリストの変更イベントを取り消すときに以前の値を設定する方法

確認を求めるコードがあります。キャンセルを選択すると、ドロップダウンの前の項目は選択されません。

$("#dropdownId").change(function(e) 
{ 
     if($(this).val() == "40") 
     { 
      if(confirm("Are you sure")) 
       return true; 
      else 
       return false; 
     } 
}); 

おかげ

+0

あなたはこれをテストしましたか?私はしませんでしたが、うまくいくと思います。編集:あなたが提供するコードは完全に動作します。質問は何ですか? – Vithozor

+0

問題はありますが、キャンセルを選択すると前の値に変更されません。 –

答えて

9

あなたは、クリックイベントに、以前の値を格納することが可能と変更イベントに戻ってそれを設定する必要があります。

var setLastSelected = function(element) { 
    $(element).data('lastSelected', $(element).find("option:selected")); 
}; 

$("select").each(function() { 
    setLastSelected(this); 
}); 

$("select").change(function(){   
     if(confirm("Are you sure")) { 
      setLastSelected(this); 
      return true; 
     } 
     else { 
     $(this).data('lastSelected').attr("selected", true); 
     return false; 
     } 
}); 

参照:http://jsfiddle.net/w9JYX/14/

更新:一連のドロップダウンコントロールでより包括的に動作するようにコードを更新しました。クリックハンドラ。ここで

+0

これは正常に動作します。 ありがとうございます –

+1

その変数の代わりに '.data()'を使用する方がよりエレガントになります。 – kapa

+0

lastSelected = $( "#dropdownId option:selected")の代わりに "this"をどのように渡すことができますか。同じ関数を呼び出す複数のドロップダウン要素があるため –

2
var previous_option = $('#dropdownId option:selected'); 
$("#dropdownId").change(function(e){ 
    var $this = $(this), 
     selected = $this.find('option:selected'); 
    if($this.val() == "40"){ 
     if(confirm("Are you sure")){ 
      previous_option = selected; 
      return true; 
     } else{ 
      selected.removeAttr('selected'); 
      previous_option.attr('selected', 'selected'); 
     } 
    } else{ 
     previous_option = selected; 
    } 
}); 
+0

は、クリックイベントを妨害する必要がないので、実際には私の解決策以上のものが好きです。 –

0

は、グローバル変数や他の機能を作成することなく、同じラインに沿って少しタイトなソリューションです:

$('#dropdownId') 
    .on('focus', function() { 
     $(this).data("prev", $(this).val()); 
    }) 
    .change(function() { 
     if (confirm('Are you sure?')) { 
      //normal case where the dropdown changes 
      $(this).data("prev", $(this).val()); 
     } else { 
      //if the user doesn't confirm reset the dropdown back to what it was 
      $(this).val($(this).data("prev")); 
     } 
    }); 
関連する問題