【问题标题】:Apply jquery function on content loaded via Ajax对通过 Ajax 加载的内容应用 jquery 函数
【发布时间】:2011-05-23 00:52:37
【问题描述】:

我通过 Jquery (ajax) 加载面板 (html),在面板中有一个带有复选框的登录表单。一旦用户单击复选框(记住我),我想在 cookie 中设置用户名。它不工作。有解决办法吗?

$('#cookie').bind('change', function() {
       $.cookie("log_user", $("#log_user").val(), {expires: 14});
       $.cookie("log_pass", $("#log_pass").val(), {expires: 14});
});

  $("#gate").click(function () {
    var panel = $("#panel");
    if (!panel.data("loaded")) {
        $("#panel").load("/v3/ajax/panel.php");
        panel.data("loaded", true);

        var log_user = $.cookie('log_user');
        var log_pass = $.cookie('log_pass');
        // autofill the fields
        $('#log_user').attr("value", log_user);
        $('#log_pass').attr("value", log_pass);

    }
    panel.slideToggle("slow");
});




<form action="/members/login.php" method="post">
<label for="log_user">Username</label><input id="log_user" type="text" name="user" value="" maxlength="50"  /><br />
<label for="log_pass">Password  </label><input id="log_pass" type="password" name="pass" value=""  maxlength="50"  /><br />
<input id="cookie" type="checkbox" name="cookie" value="do" style="border: 0px;" /><label for="cookie"><small>Remember me</small></label><br />

<a title="Join Sionvalais" href="/members/register.php">register</a><br />
<input type="submit" name="submit" value="Login"  />
</form>

【问题讨论】:

    标签: jquery ajax cookies


    【解决方案1】:

    我相信这是因为您使用的是 change() 事件而不是 live() - 因为,假设 #cookie 仅在您的 Ajax 事件之后被调用到页面中,它在初始渲染时不存在,它不能在 jquery API 中绑定更改事件 - checkout live()

    http://api.jquery.com/live/

    更新

    按照您的 cmets,我在 JSFiddle 中整理了以下模型,这似乎可行。

    http://jsfiddle.net/beardtwizzle/52JQX/2/

    我在测试期间遇到的唯一错误与 $.cookie 有关 - 您需要为此添加一个插件 (http://plugins.jquery.com/files/jquery.cookie.js.txt)

    更新 2

    问题似乎肯定出在 cookie 设置上 - 尝试将 alert('hello world'); 放在 cookie 代码的位置,您应该会看到它到达了那里 - 假设您正在使用 live('change',function ()... 而不是绑定。

    但是,这不是你真正的问题 - 你真正的问题是这种“记住我”的方法在很多层面上都是不安全的。

    1. 您正试图以纯文本形式存储糟糕的访问者密码 - 这很糟糕
    2. 当您在用户的计算机上看到 cookie 时,您只需将其中的任何内容写入您的字段的值属性即可。通过这样做,您假设用户拥有来自您网站的真正 cookie - 并且没有注入一些他们自己的恶意代码,请参阅 (http://en.wikipedia.org/wiki/Cross-site_scripting)李>

    根据上述情况我的回答

    我的建议是完全删除此代码,然后离开并阅读网络安全,然后重新解决它。如果您继续执行此操作,您将伤害无辜的用户(并严重损害您的声誉)。

    【讨论】:

    • 您好,我更改了功能,但仍然无法正常工作(请参阅我的原始帖子)。感谢您的帮助
    • 您更新的代码使用的是 bind() 而不是 live() - 您是否还可以发布 Ajax 调用返回的 HTML 示例。干杯
    • 你在使用 $.cookie 插件吗 - 这不是 JQuery api 原生的
    • 如果我转到面板(页面),我会看到用户名和密码。一旦加载到网站上它就消失了。这真的很奇怪
    • 您最初遇到的问题似乎与您使用的 Cookie 插件完全相关。我会改为查找 document.cookie(稍后我会尝试发布一个工作示例)。更重要的是,我刚刚意识到您建议将密码存储在 cookie 中——这真的非常糟糕——这意味着用户输入的任何密码都以纯文本形式存储。如果有人要获取该用户的机器(合法地或通过 XSS 攻击),他们可以看到他们的密码 - 这很可能是他们用于一切的密码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多