1

ボタンをクリックすると contentEditable div でブラウザの編集がトリガーされるのに、同じ execCommand を呼び出す div をクリックするとトリガーされない理由を誰かが説明できますか? http://jsfiddle.net/GgX8G/3/には、同じコードをトリガーするボタンと div がありますが、ボタンだけが太字のアクションを実行します。

<div id="boldB">B</div>
<button id="bld">B</button>

$(document).ready(function(){  
    $('#boldB').click(function() {
            document.execCommand('bold', false, null);
            alert("clicked the B div");
        });

    $('#bld').click(function() {
            document.execCommand('bold', false, null);
            alert("clicked the B button");
        });
}); 

ありがとう

4

2 に答える 2

7

をクリックするdivと、現在選択されているdivものがフォーカスを失うため、execCommand関数は何も実行できません。イベントを早期にキャッチし (マウス ダウンなど)、それを防ぐ必要があります。例: http://jsfiddle.net/GgX8G/13/

行ごとの説明:

$('#boldB').mousedown(function(e) {

mousedown イベントは、クリック イベントの前、およびフォーカスが変更される前に呼び出されるため、フォーカスが変更されないようにすることができます。

    e.preventDefault();

イベント オブジェクトを呼び出すpreventDefaultと、後続のデフォルト アクション (フォーカスの変更など) が発生しなくなります。

    document.execCommand('bold', false, null);

それが済んだら、まだフォーカスがあり、選択範囲が損なわれていないため、 を安全execCommandに使用できます。div

于 2013-05-17T14:42:45.707 に答える
-4

ここで、これを試してくださいhttp://jsfiddle.net/GgX8G/7/

あなたが望むjqueryの行はこれです:

$("#boldB").css("font-weight", "bold");
于 2013-05-17T14:41:28.213 に答える