2011-07-13 58 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