0

我有这个代码:

$('#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('*')但有一个语法错误,因为我认为它不是一个实际的事件句柄?

有什么简单的方法可以做到这一点?

4

2 回答 2

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);
    });
}

也就是说,使用 selector 创建一个 jQuery 对象#name',然后测试它.length是否不为零。您可以将其缩短为:

if ($('#name').length) {

...因为非零.length是真实的。

于 2013-06-29T23:14:57.650 回答
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();
}

当然,显然还有更多的差异,但这应该可以教给你一些东西。

于 2013-06-29T23:42:37.680 回答