在输入时触发的DIFFERENT元素的JQUERY点击处理程序?

时间:2012-03-06 03:46:33

标签: javascript jquery event-handling internet-explorer-9

网址位于:http://prorankstudios.com/sandbox/wtf/

使用IE9,重点关注User或Pass字段,点击ENTER键......

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

当#live_site_link上没有发生任何点击时,#live_site_link(在common.js的第30行上分配)的点击处理程序正在运行...

登录提交代码:

    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行中分配的按键和单击按钮)有时会在页面重新加载后运行,这很奇怪。

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

IE9在做什么?

3 个答案:

答案 0 :(得分:0)

e.preventDefault()

中返回false之前,请尝试拨打e.stopPropagation()Login.SubmitOnEnter

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

答案 1 :(得分:0)

这个唯一的“解决方法”我可以弄清楚将实时站点链接按钮更改为常规锚标记实际上是将表单标签中的登录字段和按钮括起来。

显然没有封装表单标签的那些,IE9使用live_site_link按钮而不是GO按钮在输入上的键盘处理程序和登录表单的Go按钮上的单击处理程序之前按自然输入键按下提交表单永远有机会触发,这会导致页面重新加载(因为这是live_site_link的点击处理程序所做的)。

现在我必须处理没有AJAX的登录...

答案 2 :(得分:-1)

您可能会通过使用提交处理程序而不是需要捕获回车键并使其单击提交按钮来更轻松地管理登录提交过程。看起来像额外的代码,以更简单的方式来解决这个问题

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

   return valid;
})

由于没有ajax而被编辑