2011-01-28 84 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);