2011-07-13 26 views
0

我在我的网站上运行jQuery的聊天。但是,问题是在IE9上,当用户在输入文本字段上按Enter时,它会提交两次。我假设它可能认为它也必须点击按钮?多个jQuery函数?

任何帮助?

<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] + "&nbsp;<b>" + val[1] + "</b>:&nbsp;" + val[2] + "<br />"; 
      $("#actual").append(test); 
     }); 
     $("#actual").scrollTop(0); 
    }); 

    setTimeout(update, 1000); 
} 
</script> 

回答

1

电话e.preventDefault(),以阻止IE处理Enter keyrpess本身。

+0

我可以在任何地方添加吗? – Flipper

+0

这样做,如果用户按下“Enter”键。 – SLaks

0

这是因为进入触发器提交输入的表单以及您可能具有的任何处理程序。

1

当您发布时清除#消息,而不是成功响应后。您可能需要处理发布错误,以便重新填充消息。

function sendPostMessage() 
{ 
    var msg = $('#message').val(); 
    $('#message').val(''); 
    $.post("http://www.prizetv.org/alpha/ajax.php", { "message": msg}, function(data) { 
      //alert(data); 
     } 
    ); 
} 

更新:我错过了你没有阻止从形式提交由于迫切的在输入栏中输入。当用户按下回车键时,您需要阻止表单提交event.preventDefault()。

if(keycode == '13') 
{ 
    sendPostMessage(); 
    event.preventDefault(); 
} 
+0

如果我使用preventDefault(),那么我将不必添加var msg =;部分......吧? – Flipper

+0

正确,但那个安全警卫会防止双击发送按钮的人。当用户按下回车键时,它也应该是event.preventDefault()。 – Manfre