簡體   English   中英

防止失去元素焦點(需要跨瀏覽器解決方案)

[英]Prevent loss of element focus (Need cross-browser solution)

我使用以下解決方案來防止用戶單擊.box元素時#content文本區域失去焦點:

// Detect latest element clicked
$(document).mousedown(function(e) {
    lastElClicked = $(e.target);
});

// Prevent loss of focus for textarea when clicking on tools
$("#content").on("blur", function(event) {
    if (lastElClicked.attr('class') == 'box'){
        event.preventDefault();
        this.focus();
        return false;
    }
});

簡而言之,在鼠標按下時保存已單擊的目標元素。 #content文本區域的模糊情況下,檢查最后單擊的元素是否為.box 如果那是防止默認設置的原因,請重新調整#content文本區域的#content並返回false。

我的解決方案在Chrome上運行完美,但在Safari和Firefox下仍然沒有重點關注。 我該如何使它跨瀏覽器工作?

編輯:

提供的解決方案的問題在於,該元素實際上失去了焦點,之后又重新聚焦。 在帶有上述代碼的Chrome瀏覽器中,我從未真正放松過焦點,這意味着所選文本保持選中狀態。

編輯:

嘗試這個:

// Detect latest element clicked
$(document).mousedown(function(e) {
    window.lastElClicked = $(e.target);
});

// Prevent loss of focus for textarea when clicking on tools
$("#content").on("blur", function(event) {
    if (window.lastElClicked.attr('class') == 'box'){
        event.preventDefault();
        var that=this;
        setTimeout(function(){
            $(that).trigger('focus');
        },200);
        window.lastElClicked="";
        return false;
    }
});

另外,這是一篇有關該錯誤的不錯的文章,似乎出現在Safari的一部分: http : //bugs.jquery.com/ticket/7768

或者,您可以嘗試以下一種方法:

$('.box').click(function(event){
    event.preventDefault();
    $('input').each(function(){
        $(this).trigger('blur');
    });
    setTimeout(function(){
            $('#content').trigger('focus');
        },200);
});

最后,我不得不提的是,它仍然失去了對突出顯示文本的關注,在我看來,這在這種情況下是無法完成的任務!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM