0

.step をクリックするたびに要素 .editor にフォーカスしたいと思います。問題は、.new、.delete、.copy、.resize のボタンのクリックを除外したいことです。ボタンをクリックしても、集中するのではなく、他の機能の設定を個別に実行するだけです。これどうやってするの。これはhtml構造です:

<div class="step">
 <div class="editor"></div>
   <div class="new"></div>
   <div class="delete"></div>
   <div class="copy"></div>
   <div class="resize"></div>
</div>

ここに私の間違ったjQueryがあります:

$(document).on('click', '.step', function() {
    if ( $(this)  !== $(".sort-slides") || $(".draggable_on") || $(".copy-slide") || $(".new-slide") || $(".delete-slide")  )
    $(this).find(".editor").focus();
});
4

2 に答える 2

1

JavaScript では、要素でイベントが発生すると、各要素の祖先でトリガーされます。これをイベント伝播と呼びます。falseイベント ハンドラーから戻ることで、この動作を停止することができます。

$(".new, .delete, .copy, .resize").click(function(event) {

  // do something
  alert("click");

  // prevent the event from propagating
  return false;
});

$(".step").click(function() {

  // do something
  alert("focus");
});

CodePenでの例を次に示します。

ただし、Gupta が言ったように、関数は、およびタグfocusにのみ適用されます。<input><select><a>

于 2013-09-24T08:42:10.770 に答える
1

まず、if ステートメントが正しくありません。

if (x == 1 || 2 || 3 || 4 || 5) { ... }

と同じではありません

if (x == 1 || x == 2 || x == 3 || x == 4 || x == 5) { ... }

0 以外はすべて true になるため、このステートメントは常に true を返します。したがって、x が 0 の場合でも、ステートメントは次のようになります。

if (false || true || true || true || true) { ... }

さらに、クリック イベントをキャッチ$(this)する div は常に.stepdiv であり、その子ではありません。

于 2013-09-24T08:38:07.203 に答える