2012-03-06 83 views
0

URL是在这里:http://prorankstudios.com/sandbox/wtf/JQUERY点击处理器从不同的元素触发输入?

使用IE9,重点放在用户或通场,敲回车键...

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

发生的事情是,当没有点击发生在#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 click处理:

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

事实上,处理程序的登录表单(两者KEYUP和login.js线22a分配上的Go按钮的点击nd 24分别)有时会在页面重新加载后运行,这很奇怪。

在IE7 /兼容模式下,KEYUP并单击处理程序login_submit正常工作,页面没有加载。在我测试的所有其他浏览器中也是如此。

什么是IE9在做什么?

+0

这不是发生了什么事情。提交功能没有在IE9中停止。我不知道Login.Submit在CAMO CMS方面做了什么,但是我敢打赌,如果你捕获事件函数(event),并使用event.preventDefault();它很可能会解决你的问题。 – Ohgodwhy 2012-03-06 04:01:02

+0

如果你仔细观察,没有提交功能被停止......没有提交表单标签。在live_site_link的common.js点击处理程序上放置一个断点,您会看到它正在触发。仅限IE9。 – Rimer 2012-03-06 04:06:07

+0

使用$(“#login_user”)发布一些代码,您一直在尝试使用 – Rafay 2012-03-06 04:15:32

回答

0

唯一的“修复”这个我能想出短期改变主网站链接按钮到正规的锚标记实际上是将登录字段和按钮包含在表单标记中。

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

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

0

尝试调用e.preventDefault()e.stopPropagation()Login.SubmitOnEnter

这将是更好不过如果你缠着你的窗体元素返回false之前,然后贴的形式提交事件。这样,它仍然可以在没有JavaScript的情况下工作,并且您不必为点击而输入单独的事件并输入新闻。

+0

感谢您的回答。该函数在live_site_link click处理程序运行之后才运行。在common.js中放置一个断点并亲自查看...它将通过#live_site_link的点击处理程序重定向到./,它不在登录表单附近......此外,该站点将严重依赖ajax,因此规则的形式,而不错,是没有意义的。 – Rimer 2012-03-06 04:06:52

+0

在这种情况下,我肯定会建议更改为使用提交作为@charlietfl也建议,即使您的表单将只使用ajax。 – 2012-03-06 04:09:18

+0

这会阻止错误的点击处理程序?一个完全不同的点击处理程序触发的情况比预期的要多。这是这里的问题,不是缺少一个HTML表单... – Rimer 2012-03-06 04:11:32

-1

您可能会通过使用提交处理程序,而不需要捕捉回车键,使其点击提交按钮管理登录提交过程更容易。好像额外的代码来解决做一个简单的方法

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

    return valid; 
}) 

编辑由于没有AJAX

+0

有没有可以提交的表单!我也发现,当应用程序如此严重依赖ajax时,它必须同时处理ajax表单提交和自然的HTML表单提交,这将使常规的HTML表单支持模拟程序变得非常痛苦和“额外的工作” ... – Rimer 2012-03-06 04:10:08

+0

但您使用的是用于表单的字段集。我怀疑IE期望它是这样的形式 – charlietfl 2012-03-06 04:19:03

+0

好了,但无论如何,为什么对在页面的左上角点击一个按钮处理程序被按下时,理应无关的字段集输入字段中输入触发? – Rimer 2012-03-06 04:23:25