我在一个简单的表单上使用此代码。请告诉我为什么这段代码有效
$(document).ready(function(){
$(":input").focus(function() {
$(this).keyup(function(){
if (this.value != this.lastValue) {
$.post("ajax-validation.php", { "username" : $(this).val() },
function(data){
$("#display").html(data);
});
this.lastValue = this.value;
};
});
});
});
这不是吗?
$(document).ready(function(){
$(":input").focus(function() {
$(this).keyup(function(){
if (this.value != this.lastValue) {
$.post("ajax-validation.php", { $(this).attr("name") : $(this).val() },
function(data){
$("#display").html(data);
});
this.lastValue = this.value;
};
});
});
});
这是一件非常奇怪的事情!!
答案 0 :(得分:6)
不是。 $(this)
没有您放置它的上下文。您需要缓存它并重用它。像这样:
$(document).ready(function() {
$(":input").focus(function() {
$(this).keyup(function() {
var el = $(this), theName = el.attr("name"), data = {};
data[theName] = el.val();
if (this.value != this.lastValue) {
$.post("ajax-validation.php", data , function(data) {
$("#display").html(data);
});
//console.log(el.attr("name"), el.val());
this.lastValue = this.value;
};
});
});
});
代码正确!似乎不允许使用方法(即使它返回一个字符串)。所以我把它放在另一个变量中并在那里使用它。的 Tested and works. (see the requests with dev tools or firebug) 强>
代码正确!再次!似乎$.post
不喜欢变量(它将它们视为字符串),因此我在$.post
方法之外定义数据对象,并将其传入。像魅力一样工作。
代码是正确但不是健壮,这意味着它会完全按照您在答案中的要求工作,但它可能会扼杀您的服务器在发生攻击时有无尽的请求。你应该:
setTimeout
来限制请求(仅在3-4秒后不进行编辑)。您应该(在我看来)有一个验证按钮(或链接,或其他)来检查输入是否有效,而不是在按键上自动验证。
答案 1 :(得分:2)
而不是
$.post("ajax-validation.php", { $(this).attr("name") : $(this).val() },
尝试
var hash = {};
hash[$(this).attr("name")] = $(this).val();
$.post("ajax-validation.php", hash,
答案 2 :(得分:-3)
$(this).attr(“name”)是一个对象而不是字符串,这是您期望在帖子中提供的内容。尝试$(this).attr(“name”)。value或$(this).attr(“name”)。val(),不记得其中一个应该适合你。