3

textareaぼかしイベントが添付されている があります。ユーザーがページ上の特定の部分をクリックした場合にぼかしイベントを実行したくありませんspan.dontClick。ただし、ユーザーが 以外のものspan.dontClickをクリックすると、ぼかしイベントが実行されます。これを行う方法を見つけましたが、見栄えが悪く、非常にハッキーに感じます。より良い解決策があると思います。これが私が思いついたものです:

if (event.type === 'focusout') {
  if (
    typeof event.originalEvent !== 'undefined' &&
    typeof event.originalEvent.currentTarget !== 'undefined' &&
    typeof event.originalEvent.currentTarget.activeElement !== 'undefined' &&
    typeof event.originalEvent.currentTarget.activeElement.className !== 'undefined' &&
    event.originalEvent.currentTarget.activeElement.className === 'dontClick'
  ) {
    // abort the code for the blur event (in effect, do nothing)
  }
  else {
    // run code for when a user blurs by not clicking on span
  }

eventオブジェクトが jQuery イベント ハンドラーからのものであることに注意してください。eventネイティブオブジェクトと同じか、異なるかはわかりません。

また、これはほとんどのブラウザーでサイレントに失敗しますが、各オブジェクトの「未定義」状態を最後まで指定しないと、IE でデバッグウィンドウが表示されることに注意してください...

誰かがよりエレガントなソリューションを持っている場合は、それを見ていただければ幸いです。ありがとう!

4

1 に答える 1

7

との比較は必要ありませんundefined。真実のテストを行うだけです。また、のテストclassNameは必要ありません。===比較はそれをカバーします。

 if (
    event.originalEvent &&
    event.originalEvent.currentTarget &&
    event.originalEvent.currentTarget.activeElement &&
    event.originalEvent.currentTarget.activeElement.className === 'dontClick'
  ) {

しかし、jQuery は信頼できるcurrentTarget.

 if (
    event.currentTarget.activeElement &&
    event.currentTarget.activeElement.className === 'dontClick'
  ) {

または、ハンドラーにいる場合は、を使用してthisください。

 if (this.activeElement && this.activeElement.className === 'dontClick') {
于 2012-10-31T21:22:28.693 に答える