2013-03-28 3 views
5

(私はMac上のChromeとSafariでテストした)、ボタン要素が奇妙な振る舞い:ボタンのテキストをクリックして離したとき(ボタンの内側にある場合)、ボタン要素はクリックイベントを発生しませんか? WebKitのブラウザで

温家宝このフィドルでhttp://jsfiddle.net/5ReUn/3/あなたは次のようにします。カーソルが上にあるときに、

  1. 押して、マウスボタンを左HTMLボタンテキスト
  2. テキストずにボタンの領域に(押しながら)カーソルを移動し
  3. リリースマウスボタン

ボタン要素のクリックイベントは発生しません!

<button id="button">Click</button> 

とCSSは全く洗練されていません:

HTMLは非常に簡単で、クリック用

button { 
    display: block; 
    padding: 20px; 
} 

JSがキャッチ:

button = document.getElementById('button'); 
button.addEventListener('click', function() { 
    console.log('click'); 
}); 

多くの来場者を自分のサイトに文句を言いますそのボタンはクリックできません。クリックしている間にカーソルを動かしていることはわかりません。

誰かがこれに対する回避策を見つけましたか?

+0

クリックハンドラはどこですか?私はここにjsが表示されません –

+0

@silentboy、ちょうど私の質問をJavaScriptブロックで更新しました。ボタンの非テキスト領域をクリックしたり離したりするときに、テキスト部分をクリックしたり離したりすると、クリックが捕捉されます。交差しても機能しません。 –

+0

イベント「mousedown」は行いますか?誰かがすでにそれに答えていることを確認してください。 –

答えて

9

a bug in WebKitとなります。

迅速な非JavaScriptのソリューションは、SPAN要素のテキストをラップし、それがクリックスルーすることです:

<button> 
    <span>Click Me</span> 
</button> 

例CSS:

span { 
    display: block; 
    padding: 20px; 
    pointer-events: none; // < --- Solution! 
} 

バグが唯一のWebKitに表示されますので、 pointer-eventsをサポートしていないブラウザは無視できます。

0

同じjs/jqueryがバインドされた状態で、divの周りにdivを追加できます(余白のように、20px?)。そうすれば、もし彼らが逃げようとするなら(LOL)、スクリプトはまだ発砲するでしょう。しかし、押されている間にマウスをボタンから離しても、ボタンは何もしません(あなたのページでは起こらない、つまりFacebookのログインボタンやこのウェブサイトのボタンを使ってみてください) 。

+0

このウェブサイトのボタンは、ボタンのHTMLタグを使用していません。ボタンのタグの中に他のHTML要素を追加したいので、私にとっては不可欠です(たとえば、アイコンなど)。さらに、ボタンの外側にカーソルを置いたときの話はしません。ボタンのテキストの外側にカーソルを置くだけですが、まだボタンの内側にあります。 DIV要素はここでは逃げません。 –

1

ここでは、をクリックする代わりに、をドラッグしようとしています。だから、代わりにmousedownイベントを試してみてください。

//This is same as click event 
var down = false; 
var button = document.getElementById('button'); 
var info = document.getElementById('info') 
button.addEventListener('mousedown', function() { 
    down = true; 
}); 


button.addEventListener('mouseup', function() { 
    if(down){ 
     info.innerHTML += "click "; 
     down = false; 
    } 
}); 

jsfiddle

+0

同じ要素の中でドラッグすることは、通常、ドラッグとはみなされません。 –

+0

@ErnestsKarlsonsは更新された投稿をチェックします。私はこれがあなたが望んでいることを願っています..しかし、これはクリックするのと同じですか? –

+0

これは単純な問題のための非常に複雑な解決策のようです。すべてのボタンでこれを行う必要があるWebアプリケーションを想像してみてください!私はWebKitのバグだと思っています。 –

1

あなたは別の解決策が見つからない場合は、clickイベントの代わりにmousedownイベントを使用することができます。

通常の動作と異なるため、これは最適な解決策ではありません。通常、ユーザは、指がマウスボタンから離されたときにアクションが起こることを期待している。指がマウスボタンを押したままではありません。

+1

'mousedown'は良いUXにはなりません。ボタンは 'mouseup'で反応します。それだけでなく、すべてのボタンの非常に大きなサイトでイベントを変更することを意味します。 –

+0

@ErnestsKarlsons 'click'イベントは、同じ要素の' mousedown'イベントと 'mouseup'イベントのイベントを意味します。何が欲しい? –

+0

実際、 'click'イベントを' mouseup'イベントに変更しても動作します:/ /しかし、私はまだサイト全体でJSの機能を変更することを含まないより洗練されたソリューションを望みます。 –

関連する問題