我有这段代码:
$('#name').blur(function(){
$('#usernameLoading').show();
$.post("check", {
name: $('#name').val(),
platform: $('#platform').val()
}, function(response){
$('#usernameResult').fadeOut();
setTimeout("finishAjax('usernameResult', '"+escape(response)+"')", 400);
});
return false;
});
我希望将其更改为仅存在#name
,而不是模糊。我试过.is('*')
但是语法错误,因为我认为它不是一个真正的事件句柄?
实现这一目标的简单方法是什么?
答案 0 :(得分:2)
if ($('#name').length > 0) {
$('#usernameLoading').show();
$.post("check", {
name: $('#name').val(),
platform: $('#platform').val()
}, function (response) {
$('#usernameResult').fadeOut();
setTimeout("finishAjax('usernameResult', '" + escape(response) + "')", 400);
});
}
即,使用选择器#name'
创建一个jQuery对象,然后测试其.length
不为零。您可以将其缩短为:
if ($('#name').length) {
...因为非零.length
是真实的。
答案 1 :(得分:1)
如果<script type='text/javascript'>
不在<body>
的底部,您仍然可以将此代码放入某种事件处理函数中。尝试类似:
if($('#name')){
$('#usernameLoading').show();
$.post('check', {name: $('#name').val(), platform: $('#platform').val()}, function(response){
$('#usernameResult').fadeOut();
setTimeout(function(){
//need your usernameResult and response to be dealt with here
}, 400);
});
return false;
}
你应该注意到我改变了你传递给setTimeout()
的执行函数。您不能将执行的函数发送到这样的参数中,除非您希望它在现场执行。但是,您可以创建finishAjax
方法,然后在没有参数的情况下传递它:
setTimeout(finishAjax, 400);
不幸的是,setTimeout()
没有可以传递函数参数的参数。要了解我正在谈论的内容,请查看以下内容:
function lameFunc(func, funcArg){
return func(funcArg);
}
function lameQuote(q){
return q;
}
var whatever = lameFunc(lameQuote, 'var whatever is now this String');
这是一个将参数传递给另一个函数的函数示例。您可以使用匿名函数交换lameQuote
并仍然传递一个参数,例如:
var someVar = lameFunc(function(arg){return arg;}, 'This String Will Go In arg and, therfore, someVar');
这就是setTimeout()
内部工作的方式,除了它不需要另一个可以传递给你的函数的参数,所以它更像是:
function lameFunc(func){
return func();
}
当然,显然存在更多差异,但这应该教你一些东西。