jQuery: добавление исключений для фокусировки события - PullRequest
1 голос
/ 31 марта 2012

В настоящее время я использую следующий код для изменения данных, введенных в текстовой области, на HTML, введенный в элемент абзаца на моем веб-сайте.

Изменения вносятся, когда пользователь теряет фокус на элементе textarea, однако я хотел бы добавить исключения.На данный момент у меня есть код, который обернет выделенный текст в текстовой области в [b] [/ b] (тэги bb code).Однако при нажатии на ссылку, которая вызывает эту функцию, текстовое поле теряет фокус и изменяется на абзац.

Как добавить исключения в фокус?чтобы при щелчке по любому элементу с классом 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>");

}

});

Спасибо, как всегда, за любой совет!

Редактировать: Сб. 31 марта, 10:30 утра BST

Я также попытался:

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

и получить активный элемент $ (document.activeElement), который возвращает только BODYкогда вы нажимаете на что-нибудь.По-настоящему увлеченный этим, любил бы любую помощь или совет о том, как действовать!

1 Ответ

2 голосов
/ 31 марта 2012

Я бы сделал это с таймаутами ...

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>");
}
...