我在我的网站上聊天,运行在jQuery上。但是,问题是在IE9上,当用户在输入文本字段上按Enter键时,它会提交两次。我假设它可能认为它也必须点击按钮?
任何帮助?
<script>
$('#message').keypress(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '13')
{
sendPostMessage();
}
});
$('#sendMessage').click(function(event){
if(this.disabled == true)
{
alert('meh');
}
var toSend = $('#message').val();
if(toSend.length > 1 && toSend.length < 160)
{
sendPostMessage();
//alert('You are sending a message.' + toSend);
}
else
{
alert('Invalid message.');
this.disabled = true;
window.setTimeout(function(){
$('#sendMessage').removeAttr('disabled');
}, 3000);
}
});
jQuery.fn.compare = function(t) {
if(this.length != t.length)
{
return false;
}
var a = this.sort(), b = t.sort();
for(var i = 0; t[i]; i++)
{
if(a[i] !== b[i])
{
return false;
}
}
return true;
};
function sendPostMessage()
{
$.post("http://www.prizetv.org/alpha/ajax.php", { "message": $('#message').val() }, function(data) {
//alert(data);
$('#message').val('');
}
);
}
var oldMessages;
var temp;
var scroll;
$(document).ready(function() {update();});
function update() {
$.getJSON("http://www.prizetv.org/alpha/ajax.php", function(json) {
$("#actual").empty();
jQuery.each(json, function(i, val) {
var test = val[0] + " <b>" + val[1] + "</b>: " + val[2] + "<br />";
$("#actual").append(test);
});
$("#actual").scrollTop(0);
});
setTimeout(update, 1000);
}
</script>
答案 0 :(得分:1)
发布时清除#message,而不是成功回复后清除#message。您可能希望处理发布错误,以便重新填充邮件。
function sendPostMessage()
{
var msg = $('#message').val();
$('#message').val('');
$.post("http://www.prizetv.org/alpha/ajax.php", { "message": msg}, function(data) {
//alert(data);
}
);
}
更新:由于在输入字段中按Enter键,我错过了您没有阻止表单提交。当用户按下回车键时,您将希望阻止表单使用event.preventDefault()进行提交。
if(keycode == '13')
{
sendPostMessage();
event.preventDefault();
}
答案 1 :(得分:1)
调用e.preventDefault()
以阻止IE处理Enter
keyrpess本身。
答案 2 :(得分:0)
这是因为enter会触发输入所在表单的提交以及您可能拥有的任何处理程序。