JQueryイベントを接続したいドロップダウンメニューがあり、誰かがそれをクリックしたが、すでに選択されているのと同じオプションを選択した場合に発生します。
'change'イベントを使用してすべてを実行していますが、ユーザーがドロップダウンをクリックして同じオプションを再選択することが有効な場合があります。その場合は、イベントハンドラーを起動する必要があります。
これどうやってするの?
JQueryイベントを接続したいドロップダウンメニューがあり、誰かがそれをクリックしたが、すでに選択されているのと同じオプションを選択した場合に発生します。
'change'イベントを使用してすべてを実行していますが、ユーザーがドロップダウンをクリックして同じオプションを再選択することが有効な場合があります。その場合は、イベントハンドラーを起動する必要があります。
これどうやってするの?
以下のようなものを試してください、
使用する.click
$(function () {
var cc = 0;
$('select').click(function () {
cc++;
if (cc == 2) {
$(this).change();
cc = 0;
}
}).change (function () {
$('#result').append('Changed triggered ');
cc = -1;
});
});
デモ:http: //jsfiddle.net/skram/NAHXP/2/
またはを使用.focus
して.blur
$(function () {
var ddVal = '';
$('select').focus(function () {
ddVal = $(this).val();
}).blur(function () {
if (ddVal == $(this).val()) {
$(this).change();
}
}).change (function () {
$('#result').append('Changed triggered ');
});
});
デモ:http: //jsfiddle.net/skram/NAHXP/
フォーカスイベントとブラーイベントを使用します...
var selectValue;
$('select').focus(function(){
selectValue = $(this).val();
}).blur(function(){
if (selectValue == $(this).val()) {
//nothing change event
}
})
これがクリックソリューションです
var oldValue = null;
$('select').click(function(){
s = $(this);
val = s.val();
if (oldValue == null) {
oldValue = val;
} else {
oldValue == s.val() ? alert('nothing changed') : alert('new value');
$(document).unbind('click.valueCheck');
oldValue = null;
}
})
ドキュメントクリックを拡張したより高度なソリューションは次のとおりです
他の回答は、すべてのエッジケース(ドロップダウンの外側をクリックしてからもう一度クリックするなど)を処理する、および/またはダブルイベントのトリガーを回避するソリューションを提供していないようです。
最初のトリックは、ドロップダウンがフォーカスされた瞬間から値を保存することです。通常どおり、デフォルトのchange()イベントを使用してchangewithRepeats
、ドロップダウン値が変更されたときにメソッドをトリガーします。
それ以外の場合、フォーカスされた要素を2回クリックすると、blur()が呼び出されchangewithRepeats
、ドロップダウン値が最初と同じままである場合にのみ、フォーカスが解除され、トリガーされます。
ドロップダウンを開いてキャンセルすることはできません。これは意図的なものです。焦点がぼけると、メソッドが呼び出されます。すべてのキーボード操作も機能します(ただし、同じ値を選択するときにblur()を呼び出すと、スクリーンリーダーを使用しているユーザーにとっては少し面倒になります)。
以下のフォーカス状態は、0 =フォーカスされていない、1 =フォーカスを取得しているとき、2=フォーカスを持っている。
$(function () {
var lastFocusValue = '';
var focusState = 0;
var changeWithRepeats = function (newestValue) {
// Your change action here
};
$('select').click (function () {
if (focusState == 1) { focusState = 2; return; }
else if (focusState == 2) $(this).blur();
}).focus(function (e) {
focusState = 1;
lastFocusValue = $(this).val();
}).blur(function () {
focusState = 0;
if ($(this).val() == lastFocusValue) {
// Same value kept in dropdown
changeWithRepeats($(this).val());
}
}).change (function () {
changeWithRepeats($(this).val());
});
});
Fiddleにはさらにいくつかのデバッグ出力があります:https ://jsfiddle.net/dsschneidermann/tb5csdhp/15/
この問題を解決するには、addクラスを使用します
$("#test").change(function(event){
if($(this).find('option:selected').hasClass('actived'))
alert('already selected');//write you code here
else
$(this).find('option:selected').addClass('actived');
});
このリンクを参照してくださいhttp://jsfiddle.net/muthukumar0705/nARVu/1/