2011-01-28 72 views
1

我正在使用这个jQuery的watermark plugin。它在每个页面都能正常工作,除了我的注册被调用了4次之外。在注册页面上,我收到了jQuery第57行(一个托管在Google上)的递归错误。我不认为这是jQuery的问题,但我认为它与我的代码或插件有关。你能看看你看到什么吗?jQuery错误:太多的递归

代码:

$(document).ready(function(){ 
    $(".text").addClass("idleField"); 
    $(".text").focus(function(){ 
     $(this).removeClass("idleField"); 
     $(this).addClass("focusField"); 
    }); 
    $(".text").blur(function(){ 
     $(this).removeClass("focusField"); 
     $(this).addClass("idleField"); 
    }); 
    $("#recaptcha_response_field").attr("tabindex","5"); 
    <?php if(!is_ie()){ ?> 
    $("#username").watermark("Desired Username"); 
    $("#password").watermark("Password between 6 and 12 characters"); 
    $("#confirmPassword").watermark("Confirm Password"); 
    $("#email").watermark("Please insert a valid email"); 
    <?php } ?> 
    $("#checkUser").click(function(){ 
      $("#results").html("<img src='images/loading.gif' alt='loading...' />loading..."); 
     var user = $("#username").attr("value"); 
     $.get("library/regUserCheck.php", {name: user}, function(data){ 
      $("#results").html(data); 
     }); 
    }); 
    <?php if($error){ //Make error fade out ?> 
      $("#errorField").delay(5000).fadeOut(1250); 
    <?php } ?> 
}); 
+0

什么版本的jQuery您使用的?您使用Google JQuery CDN的链接是什么? – 2011-01-28 21:23:34

+0

1.4.4 https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js – jefffan24 2011-01-28 21:26:10

回答

2

在代码中太多的递归调用,并不意味着你什么吗?下面是改进代码:

$(function() { 
    $(".text").addClass("idleField").focus(function() { 
     $(this).removeClass("idleField").addClass("focusField"); 
    }).blur(function() { 
     $(this).removeClass("focusField").addClass("idleField"); 
    }); 

    $("#recaptcha_response_field").attr("tabindex", "5"); 
    /*@cc_on 
    var $username = $("#username"); 
    $username.watermark("Desired Username"); 
    $("#password").watermark("Password between 6 and 12 characters"); 
    $("#confirmPassword").watermark("Confirm Password"); 
    $("#email").watermark("Please insert a valid email"); 
    */ 
    $("#checkUser").click(function() { 
     $("#results").html("<img src='images/loading.gif' alt='loading...' />loading...").load("library/regUserCheck.php", { 
      name: $username.val() 
     }); 
    }); 
    <?php if ($error) { /* Make error fade out */ ?> 
     setTimeout(function() { 
      $("#errorField").fadeOut(1250); 
     }, 5000); 
    <?php } ?> 
}); 

提示:

  • 可以使用条件注释(/*@cc_on … */)来处理IE,没必要做用PHP。
  • 切勿多次使用jQuery选择器。 jQuery需要多次在DOM中查找该元素。在大多数情况下,你可以使用,像这样:
$('#el').click(function() { 
    … 
}).addClass('myClass');

如果你不能做到这一点,缓存它给一个变量。例如:

var $el = $('#el'); 
$el.html('loading…'); 
setTimeout(function() { 
    $el.load('/ajax/echo/html', {html: 'Hello, world!'}); 
}, 5000);

例如,如果你想为一个元素指定多个CSS规则,这是最好的语法:

$('#el').css({ 
    'background-color': 'blue', 
    color: 'white' 
});
  • 这真的取决于风格并不重要,但是您可以使用$(function() {作为$(document).ready(function() {的简写。

我希望这就够了。 :)

0

如果问题调用watermark多次我会尝试使用定时器:

$("#username").watermark("Desired Username"); 
window.setTimeout(function() { $("#password").watermark("Password between 6 and 12 characters"); }, 100); 
window.setTimeout(function() { $("#confirmPassword").watermark("Confirm Password"); }, 200); 
window.setTimeout(function() { $("#email").watermark("Please insert a valid email"); }, 300);