对通过Ajax加载的内容应用jquery函数

时间:2011-05-22 15:36:58

标签: jquery ajax cookies

我通过Jquery(ajax)加载一个面板(html),在面板中有一个带复选框的loginform。我想在用户点击复选框后在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>

1 个答案:

答案 0 :(得分:0)

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

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

<强>更新

根据你的评论,我在JSFiddle中整理了以下模拟,这似乎有效。

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

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

更新2

问题肯定在于cookie设置 - 尝试在{+ 1}}处放置cookie代码,你应该看到它到达那里 - 假设你正在使用live('change') ,function()...而不是绑定。

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

  1. 您试图以纯文本形式存储访问者密码不足 - 这是BAD
  2. 当您在用户的计算机上看到一个cookie时,您只需要写出您所在字段的值即可。通过这样做,你假设用户有一个来自你网站的真正的cookie - 并且没有注入一些他们自己的恶意代码,请参阅(http://en.wikipedia.org/wiki/Cross-site_scripting)
  3. 鉴于以上

    ,我的回答

    我的建议是完全删除此代码,然后离开并阅读网络安全性,然后重新解决它。如果你继续这样做,你就会伤害无辜的用户(并严重损害你的声誉)。