我正在尝试验证textarea,确保每行以“http://”开头:
当url错误时,它会执行else语句,但如果它是正确的,它就不会被执行。
有什么问题?
答案 0 :(得分:2)
它不起作用,因为this
引用了一个String对象。 after
函数需要一个jQuery对象或一个字符串。奇怪的是,javascript字符串与String对象不同。您的else语句有效,因为当您将常规字符串连接到场景后,this
将被转换为幕后的字符串。但是,if失败,因为在这种情况下this
仍然是String对象。你可以通过几种方式修复它,但这里有一个:
$('button').click(function(){
var links = $('textarea').val().split('\n');
$.each(links,function(){
if( this.substr(0, 7) == 'http://' )
$('p').after(''+this);
else
$('p').after('error: '+this+'<br/>');
});
return false;
});
修改强>
这是另一个SO问题的链接,可以更详细地讨论Why are there two kinds of JavaScript strings?
答案 1 :(得分:0)
不要使用$.each
来迭代数组。使用此:
for(var i = 0; i < links.length; i++) {
if(links[i].substring(0, 7) !== 'http://' && links[i].substring(0, 8) !== 'https://') {
$('p').text('Error!');
return false;
}
}
答案 2 :(得分:0)
由于$('p').after(this);
,它无效。在这种情况下,this
只是一个字符串文字。
after
函数的第一个参数应该是要在匹配元素集中的每个元素之后插入的HTML字符串,DOM元素或jQuery对象。
答案 3 :(得分:0)
这个怎么样:
$('button').click(function(){
var links = $('textarea').val().split('\n');
$.each(links,function(){
if( this.substr(0, 7) == 'http://' )
$('p:last').after("<p>" + this + "</p>");
else
$('p:last').after('error: '+this+'<br/>');
});
return false;
});
答案 4 :(得分:0)
我认为这会好一点,试试吧
$('button').click(function(){
var links = $('textarea').val().split('\n');
$.each(links,function(){
if( this.substr(0, 7) == 'http://' )
$('#mydiv').append(this + '<br/>');
else
$('#mydiv').append('<span style="color:red;">error: '+this+'</span><br/>');
});
return false;
});
HTML:
<textarea></textarea>
<button>Submit</button>
<div id='mydiv'></div>