2012-01-05 8 views
0

やあでマウスダウンイベントを管理します。私はマーク・コリの非常に良い例をhttp://mark.koli.ch/2009/09/use-javascript-and-jquery-to-get-user-selected-text.htmlに見つけました。私はで働い例を作成しましたは、ハイライト表示JavaScriptとunhighlightingテキスト

http://jsfiddle.net/metalskin/43c8h/8/

次のように私は特定のインスタンスのためのコードに問題がある:

  1. は、いくつかのテキストを選択します。
  2. ダイアログが表示されます。
  3. ダイアログを閉じます。
  4. ドラッグしないでクリックすると、強調表示されたテキストが消去されます。
  5. ダイアログが表示されます。
  6. ダイアログを閉じます。
  7. テキストの選択が解除されます。

私のロジックでは、私はダイアログを使用していません(例として簡単です)。私は、ユーザーがアクションを実行できるように画像を含むdivを挿入しています。

問題は、2回目のクリックで実際にテキストをクリアすることですが、ブラウザがテキストをクリアする前に何らかの理由でブラウザがマウスアップイベントを発生させていることが原因です。これは明らかにダイアログがポップアップする問題ではありませんが、私のロジックでは、複数のdivが追加され、テキストの上に複数の浮動イメージが追加されてしまいます。

イベントによって強調表示されたテキストが削除されると判断されることはありますか?理想的には、ブラウザがテキストをクリアした後、私はむしろイベントの火を吹きます。

ありがとうございます(とにかく、newbの質問があれば申し訳ありませんが、JavaScriptの場合は非常にラフです)。

:編集:

私はそれを使用しているかのユースケースを説明する必要があります。

  1. ユーザーが
  2. アイコンは、彼らはただのテキスト、ユーザがマークするいくつかの詳細を入力するためのフォームを開き、アイコンを、選択
  3. を強調するから、マウスボタンをリリースしどこの上に表示されるページ上のテキストをハイライト(この時点でアイコンが削除されます)
  4. ユーザーがフォーム(ajax)を送信すると、フォームが閉じます。
  5. ページが表示され、強調表示されたテキストがハイライト表示されなくなりました(ただし余分なマークアップが追加されました)。アイコン
  6. ページの

または

  1. ユーザーのハイライトのテキストは、彼らは単にユーザーが両方削除するためにページ上の他の場所でクリックするテキスト
  2. を強調するから、マウスボタンをリリースした場合の上に表示されます強調表示されたテキストを削除してアイコンを削除します。
  3. ユーザーがフォームを送信すると、フォームが閉じます。

アイコンを選択したときに選択したテキストが選択解除されても問題はありませんが、ページの別の部分をクリックすると問題が発生してマウスイベントが再開し、提供されている例では適切でない場合はダイアログ)。

+0

を入力するとダイアログが表示されません。それはちょうどテキストの選択を解除する –

答えて

0

ここであなたが^ _^

http://jsfiddle.net/43c8h/16/

を行く私は、マウスアップイベントで選択をクリアするには、コードのこの部分を変更しました。 。

if (selectedText != '') { 
    alert("You selected:\n" + selectedText + "\n"); 
    window.getSelection().removeAllRanges(); 
} 

それとも、ユーザーがそれを選択した後、あなたは同じwindow.getSelection()でマウスダウン関数を呼び出すことができます強調表示されたテキストを維持したい場合removeAllRanges();マウスをクリックするたびに選択をクリアするコード。手順4の後にfirefoxで

+0

そのJackalopeZeroのおかげで、残念なことに私の使用のために奇妙に見えるだろう。オリジナルの質問を編集してより明確にしますが、強調表示されたテキストはユーザーのフローティングイメージのコンテキストを提供します。テキストは強調表示されないように選択されるまで強調表示されたままにしておく必要があります(意味がある場合)。 – Metalskin

+0

ああ、前回の記事を投稿したときにJackalopeZeroの編集が表示されませんでした。私はそれを試して、それがどのように行くか見る。私はこれらの行に沿った何かが答えになると感じていましたが、私はマウスイベントを混乱させる必要はないと思っていました。 – Metalskin

+0

このイベントを追加するだけです:) James.Selector.mousedown = function(){ window.getSelection()。removeAllRanges(); } $(document).bind( "mousedown"、James.Selector.mousedown); http://jsfiddle.net/43c8h/21/ – JackalopeZero

関連する問題