jQuery 错误:太多递归

发布于 2024-10-15 03:18:54 字数 1375 浏览 4 评论 0原文

我正在使用这个水印插件用于 jQuery。它在每个页面上都运行良好,除了我的注册,它被调用了 4 次。在注册页面上,我在 jQuery(托管在 Google 上的一个)的第 57 行收到太多递归错误。我不认为 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 } ?>
});

I'm using this watermark plugin for jQuery. It works fine on every page except for my registration where it gets called 4 times. On the registration page I am getting a too much recursion error on line 57 of jQuery (one hosted on Google). I don't think it's jQuery that is the problem, though I think it has to do with my code or that plugin. Can you look to see if you see anything?

Code:

$(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 } ?>
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

纸短情长 2024-10-22 03:18:54

你的代码中有太多的递归,这对你来说没有任何意义吗?下面是改进后的代码:

$(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() {) 的简写。

我希望这已经足够了。:)

Too much recursion in your code, doesn't that mean anything for you? Here's the improved code:

$(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 } ?>
});

Tips:

  • You can use conditional comments (/*@cc_on … */) to handle IE, no need to do that with PHP.
  • Never use a jQuery selector multiple times. jQuery needs to find that element in DOM multiple times. In most cases, you can use chaining, like this:
$('#el').click(function() {
    …
}).addClass('myClass');

If you can't do that, cache it to a variable. Example:

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

For example, if you want to specify more CSS rules for an element, this is the best syntax:

$('#el').css({
    'background-color': 'blue',
    color: 'white'
});
  • This really depends on style and isn't important, but you can use $(function() { as a shorthand for $(document).ready(function() {.

I hope that's enough. :)

彩扇题诗 2024-10-22 03:18:54

如果问题是多次调用 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);

If the problem is calling watermark multiple times I would try using timer:

$("#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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文