好的,我们都知道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中实际测试它。
答案 0 :(得分:1)
劫持默认按钮事件?
$('#mysubmit').click(function() {
event.preventDefault(); // don't let the click event happen
sendAjaxRequestInsteadOfRealForm($('#input1').val(), $('#input2').val());
return false;
});