2012-03-30 15 views
1

現在、次のコードを使用して、テキストエリアに入力されたデータを、Webサイトの段落要素に入力されたhtmlに変更しています。jQuery:イベントをフォーカスするために例外を追加する

ユーザーがtextarea要素に注目しなくなったときに変更が加えられますが、例外を追加したいと思います。現時点では、[b] [/ b](bbコードタグ)のテキストエリアに選択されたテキストを折り返すコードがあります。ただし、この関数を呼び出すリンクをクリックすると、テキストエリアのフォーカスが失われ、段落に変更されます。

例外をフォーカスアウトに追加するにはどうすればよいですか?そのため、例外とみなされるtextEditクラスの要素がクリックされたときに、そのテキスト領域を置き換えるコードが実行されないようにします。

$("textarea").live('focusout', function (e) { 

var $target = $(event.target); 

if ($target.is(".textEdit")) { 

    } else { 
var itemContent = $(this).val(); 

itemContent = htmlStrip(itemContent); 

    itemContent = itemContent.replace(/\n/g, "<br/>"); // New lines 
     //itemContent = itemContent.replace(/\s/g, " &nbsp;"); // Spaces 

    // Formatting replacements 
    itemContent = itemContent 
     .replace(/\[b\]/gi, "<b>") 
     .replace(/\[\/b\]/gi, "</b>") 
     .replace(/\[i\]/gi, "<i>") 
     .replace(/\[\/i\]/gi, "</i>") 
     .replace(/\[s\]/gi, "<s>") 
     .replace(/\[\/s\]/gi, "</s>") 

     $(this).replaceWith("<p class='notes'>"+ itemContent +"</p>"); 

} 

}); 

ありがとうございました。

編集:私も試してみました

土3月31日午前10時30分のBST:

if ($("#bold").is(":focus")) 

とあなたがクリックしたときにのみBODYを返し能動素子$(document.activeElement)を取得何でも本当にこの人と一緒に立ち往生する方法に関する助言やアドバイスが大好きです。私はタイムアウトでそれを行うだろう

答えて

2

...

var renderHandler; 

$("textarea").live('focusout', function (e) { 
    var currentNote = this; 
    renderHandler = setTimeout(function(){ renderNote(currentNote); }, 50); 
}); 

// handle exceptions 
$('#bold, #other_exception_element, .and_yet_another_exception').live('focusin', function (e) { 
    clearTimeout(renderHandler); 
}); 


function renderNote(note){ 

    var itemContent = $(note).val(); 

    itemContent = htmlStrip(itemContent); 

    itemContent = itemContent.replace(/\n/g, "<br/>"); // New lines 
     //itemContent = itemContent.replace(/\s/g, " &nbsp;"); // Spaces 

    // Formatting replacements 
    itemContent = itemContent 
     .replace(/\[b\]/gi, "<b>") 
     .replace(/\[\/b\]/gi, "</b>") 
     .replace(/\[i\]/gi, "<i>") 
     .replace(/\[\/i\]/gi, "</i>") 
     .replace(/\[s\]/gi, "<s>") 
     .replace(/\[\/s\]/gi, "</s>"); 

    $(note).replaceWith("<p class='notes'>"+ itemContent +"</p>"); 
} 
+0

私はそれを旋回を与えるだろう、私はタイムアウトを考えましたが、要素のクリックイベントをキャプチャする方法があるべきように思えるし、それを例外として使用してください。私は必死ですが、3日後にこれに対して私の頭を叩いて! :) – KryptoniteDove

+1

他の要素で発生するイベントの前にフォーカスアウトが発生するため、実際にはできません。何かが起きる順序の論理を考えると理にかなっています。論理的に何かをクリックすることはできません他の何かがまだフォーカスを保持している間... –

+0

それは意味をなさない、私はそれが完全に間違った方法で来ていると思うと私は木の木を見ることができないほどそれを見て!ちょうどあなたのソリューションをテストし、それは完全に動作します!どうもありがとうございます! – KryptoniteDove

関連する問題