针对错误/错误行为的浏览器嗅探替代方案(不缺少功能)

时间:2011-10-10 21:04:45

标签: javascript jquery browser-detection

好的,我们都知道browser sniffing is bad。我不打算在这里重复整个辩论,无论如何,SO也不是正确的论坛。我正在寻找一个问题的解决方案,建议的功能检测替代方案似乎无法解决。

在我的特定情况下,它由以下代码触发:

<form name="something" method="POST">
     <input name="input1"><input name="input2"> <!-- etc -->
     <input id="mysubmit" type="submit" value="Submit me">
</form>

<!-- during jquery initialization -->

$('#mysubmit').click(function() {
   sendAjaxRequestInsteadOfRealForm($('#input1').val(), $('#input2').val());
   return false;
});

现在,我知道这里的真正答案是“不要将input type="submit"与jQuery绑定一起使用”(我认为除submit之外)。但是这个代码在我们所有“官方”支持的浏览器上都按预期运行,只有当我们有一个用户碰巧在IE 7中尝试该网站时,这才成为一个问题(即,它绕过了绑定并提交了表单)老式的方式。)

我们不在IE 7上进行测试。因此,我们尝试在首页上使用浏览器检测,并警告用户代理表明其浏览器不受支持的用户。我不喜欢这样做,但我不清楚替代方案是什么。我想不出一个能够检测到“允许在提交按钮上单击绑定来替换实际提交”的功能检测策略。这里最好的方法是什么?

编辑以澄清:我不是要求上述代码的替代品。我知道它们是什么。我问我应该如何检测上面的代码是有问题的,以便它不会达到生产,而不必在IE 7中实际测试它。

1 个答案:

答案 0 :(得分:1)

劫持默认按钮事件?

$('#mysubmit').click(function() {
    event.preventDefault();  // don't let the click event happen
    sendAjaxRequestInsteadOfRealForm($('#input1').val(), $('#input2').val());
    return false;
});