我正在测试电子邮件输入的语法。如果电子邮件语法错误,它会在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!
}
}
答案 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);
}
}