2017-11-17 3 views
0

Ctrlキーを押すことなく、複数選択コンボボックスで複数の項目を選択できるjQueryコードがあります。通常のまたは複数選択のコンボボックスでjQueryがトリガーされるかどうかを検出する必要があります

これは機能しますが、通常の選択ボックスと干渉します。これはマウスでは変更できません。

オリジナルのjQueryのコードは次のとおりです。もちろん

(function ($) { 
$(document).ready(function() { 
    $("option").mousedown(function(e) { 
     this.selected = ! this.selected; 
     e.preventDefault(); 
     return false; 
    }); 
}); 
})(jQuery); 

、$(「オプション」)セレクタは、それが失敗した理由であるだけでなく、通常の選択ボックスに適用されます。

"multiple"属性の選択ボックスでイベントがトリガーされたかどうかを検出しようとしましたが、その方法がわかりませんでした。これを行うことができる方法の

(function ($) { 
$(document).ready(function() { 
    $("option").mousedown(function(e) { 
     if($(this).attr('multiple','multiple')) { 
      this.selected = ! this.selected; 
      e.preventDefault(); 
      return false; 
     } 
     else { 
      return true; 
     } 
    }); 
}); 
})(jQuery); 

任意のアイデア:以下は、そのうちの一つが、イベントは、オプションで選択していないトリガされたということで、様々な理由のために動作しませんか?

ああ、実際のケースでは同じコードが別のマルチセレクションでも使用されているため、マルチセレクションのIDは含めません。 - おそらくcustom-multiselecthttps://jsfiddle.net/mheumann/3zn76mex/

+1

このようなマルチセレクトのすべてのオプションを対象にするのはどうでしょうか? '$( '複数のオプションを選択')' –

+0

ありがとう!なぜ答えを投稿しないのですか? –

答えて

1

あなたはこのセレクタ使用して、すべての複数選択のオプションをターゲットにすることができます:$('select[multiple] option')を。

このセレクタは、内で発生するすべての<option>を、multiple属性の対象とします。

+0

このオプションは私の場合には簡単で、すべてのマルチセレクションコンボボックスに自動的に適用されるので、最後にこのオプションを使用しました。 –

2

は、あなたがこの行動に新しいCSSクラスを適用するすべての複数選択の要素を与える:ここで

はフィドルです。

次にあなたが持っているコードで.custom-multiselect optionのような化合物のセレクタを使用することができます...

(function ($) { 
    $(document).ready(function() { 
    $(".custom-multiselect option").mousedown(function(e) { 
     this.selected = ! this.selected; 
     e.preventDefault(); 
     return false; 
    }); 
    }); 
})(jQuery); 
+0

これも機能します!タイ! –

関連する問題