8

私は現在、地図(Leaflet.jsを介したOpenStreetMapデータ)と地図に表示されるマーカーに依存するアプリケーションを開発しています。

ユーザーの選択を実装したので、ユーザーはマーカーをクリックして選択し、Ctrlキーを押しながらクリックして選択にマーカーを追加できます。これはうまく機能します。

ここで、ユーザーがを押して、現在マップ上にあるすべてのマーカーを選択できるようにしたいと思いますCtrlA。これを実現するために使用するコードは次のようになります。

jQuery(document).keydown(function(e) {
  if (e.ctrlKey) {
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
      e.stopPropagation();
      // SELECT ALL MARKERS HERE...
    }
  }
});

これは、CtrlキーとAキーを同時に押したときにトリガーする場合に限り機能し、選択は希望どおりに行われます。

私の問題: イベントの伝播を停止する行を追加しても、ブラウザー(ChromeとOperaでテスト済み)通常のCtrl + A-Selectionを実行します。つまり、マップ上のカスタム選択の実装によってマーカーが選択されます。 、Webページ全体が選択されます。これは面倒です。地図の横に選択できるテキストがこのページにないため、実際には意味がありませんCtrlA。地図が表示されている間は無効にします。

PSブラウザでjqueryを使用してCtrl+A(すべて選択)を無効にするにはどうすればよいですか?に示されているコードを使用しようとしました。しかし、それを機能させることができませんでした。この機能は本当にAPIにありますか?

4

2 に答える 2

11

あなたの間違いがあなたがe.stopPropagation()イベントのそれ以上のバブリングを止めるだけを使用しているということであると仮定してください(あなたのイベントはドキュメントに添付されているので-それは役に立たないです)。e.preventDefault()代わりに試してください:

jQuery(document).keydown(function(e) {
  if (e.ctrlKey) {
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
      e.preventDefault();
      // SELECT ALL MARKERS HERE...
    }
  }
});

これは、このデモでは問題なく機能します

于 2012-11-26T10:10:25.920 に答える
-1

ああ、私はトリックを見つけました:

e.preventDefault();

ブラウザがデフォルトのアクションを実行するのを停止します。上記の場合、これにより、通常はでトリガーされるselect-allイベントが防止されCtrl+Aます。

于 2012-11-26T10:11:15.553 に答える