在输入时触发了来自Differential元素的JQUERY单击处理程序



URL在这里:http://prorankstudios.com/sandbox/wtf/

使用IE9,将焦点放在"用户"或"通行证"字段上,按ENTER键。。。

请注意,整个页面将重新加载。

发生的情况是,#live_site_link的点击处理程序(分配在common.js的第30行)正在运行,而#live_ste_link上根本没有点击。。。

登录提交代码:

    Login.Submit = function(e)
{
    Login.feedback.empty();
    if (Login.user.val() == '')
    {
        Camo.ErrorAlert('Invalid username.',Login.feedback);
        Login.user.focus().select();
        return false;
    }
    if (Login.pass.val() == '')
    {
        Camo.ErrorAlert('Invalid password.',Login.feedback);
        Login.pass.focus().select();
        return false;
    }
    Camo.AJAXStart('Logging in...');
    postData =
    {
        user:Login.user.val(),
        pass:Login.pass.val()
    }
    Camo.AJAXPost('index/login/',Login.Success,Login.Failure,postData);
    return false;
}

live_site_link点击处理程序:

    $('#live_site_link').click(function()
{
    window.location.href = './';
});

事实上,登录表单的处理程序(分别在login.js第22行和第24行中分配的keyup和click-on-Go按钮)有时会在页面重新加载后运行,这很奇怪。

在IE7/兼容模式下,login_submit的keyup和click处理程序正常工作,页面不会重新加载。在我测试的所有其他浏览器中也是如此。

IE9在做什么?

Login.SubmitOnEnter 中返回false之前,尝试调用e.preventDefault()e.stopPropagation()

不过,如果您在表单元素周围包装一个表单,然后为表单提交附加一个事件,那会更好。这样一来,它在没有javascript的情况下仍然可以工作,并且您不必为点击并输入按键设置单独的事件。

除了将实时站点链接按钮更改为常规锚标记之外,我能想到的唯一"解决方案"实际上是将登录字段和按钮包含在表单标记中。

显然,在没有这些封闭的表单标签的情况下,IE9使用live_site_link按钮而不是GO按钮在自然回车键按下时提交表单,然后登录表单的输入上的keyup处理程序和GO按钮上的点击处理程序才有机会触发,这会导致页面重新加载(这就是live_site-link的点击处理器所做的)。

现在我必须在没有AJAX的情况下处理登录。。。

通过使用提交处理程序,您可能会更容易地管理登录提交过程,而不需要捕获回车键并使其单击提交按钮。看起来像是额外的代码,以一种更简单的方式完成

$('form').submit(function(){
    var valid=someValidionFunction();
   return valid;
})

由于没有ajax 而编辑

相关内容

  • 没有找到相关文章

最新更新