jQuery:添加异常来聚焦事件

时间:2012-03-30 23:28:48

标签: jquery exception exception-handling focus textarea

我目前正在使用以下代码将在textarea中输入的数据更改为输入到我网站上的段落元素的html。

当用户失去对textarea元素的关注时会进行更改,但是我想添加例外。目前我的代码将在[b] [/ b](bb代码标签)中的textarea中包装所选文本。但是,当您单击调用此函数的链接时,textarea会失去焦点并更改为段落。

如何为焦点添加例外?这样当单击textEdit类的任何元素被认为是异常并且没有运行替换textarea的代码时?

$("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"))

获取活动元素$(document.activeElement),当您单击任何内容时,它只返回BODY。真的坚持这个人会喜欢任何关于如何继续的帮助或建议!

1 个答案:

答案 0 :(得分: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>");
}