警报后选择文本

时间:2011-07-31 20:14:28

标签: javascript jquery

我正在测试电子邮件输入的语法。如果电子邮件语法错误,它会在Web浏览器上发出一些消息。在用户点击该消息后,我希望浏览器选择文本。

var input = document.createElement('input');
document.body.appendChild(input);
input.onblur = function(){
    var reg = /^([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if(reg.test(this.value) == false){
        alert('Wrong syntax on e-mail');
        $(this).select();//This doesn't work!
    }
}

2 个答案:

答案 0 :(得分:4)

有趣的问题,它看起来像一个安全功能。请记住,只要您没有输入已接受的电子邮件地址,您的脚本就会阻止用户界面。

这对我有用:

input.onblur = function(){
    var _this=this;
    var reg = /^([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if(reg.test(this.value) == false){
        alert('Wrong syntax on e-mail');
        setTimeout(function(){_this.select();},1)
    }
}

如你所见,它使用超时,但我不认为延迟调用是关键,重要的是现在执行函数的不同范围(范围现在是窗口而不是输入)。

答案 1 :(得分:0)

试试这个

var input = document.createElement('input');
document.body.appendChild(input);
input.onblur = function(){
    var reg = /^([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if(reg.test(this.value) == false){
        alert('Wrong syntax on e-mail');
        SelectText(this);
    }
} 

function SelectText(text) {

    if ($.browser.msie) {
        var range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if ($.browser.mozilla || $.browser.opera) {
        var selection = window.getSelection();
        var range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
    } else if ($.browser.safari) {
        var selection = window.getSelection();
        selection.setBaseAndExtent(text, 0, text, 1);
    }
}