2011-09-30 120 views
0

嘿,我有一个吼吼箱的jQuery/ajax代码,我遇到的问题是,当我有输入消息周围的窗体标签和提交按钮的HTML代码,在按下输入键入正在重新加载页面的消息框,这在其他浏览器中不会发生,所以我删除了表单,因为它不是必需的,而且Enter键现在在IE中提交消息,但不在Chrome或Firefox中提交。有没有办法让我可以同时进行onclick事件和输入事件来纠正?此时一旦按钮被点击,按钮被禁用2秒,然后renabled,我也需要这样做,如果按下输入按钮。jquery shoutbox IE错误

我知道我有很多inline css for the shoutout box,但它现在只是一个测试版本,一旦它完成,我会整理它。

任何帮助,非常感谢。

I had the form tag like so 
<form method="POST" action=""/> 

    <div id="shoutout" style="position:absolute; height:auto; overflow-x:hidden; overflow-y:hidden; float:right; right:10px; background-color:#121212; color:#FFFFFF; font-size:14px; width:305px; padding-left:1px; padding-right:1px; padding-bottom:1px; font-family: Arial, Helvetica, sans-serif;"> 
     <h2>Shout Out!</h2>     
       <strong>Message:</strong> 
       <input type="text" id="message" name="message"/> 
       <input type="submit" id="submit" value="Submit"/> 
     <div id="messagecontainer" style="position:relative; height:240px; overflow-x:hidden; overflow-y:auto; background-color:#F5F5F5; color: #F6221D; font-size:12px; width:305px; margin-top:5px;"> 
     <div id="shoutmessages" style="position:relative; word-wrap: break-word; padding-left:5px; width:auto; height:auto; overflow-y:hidden; overflow-x:hidden;"> 
     </div> 
     </div> 
     </div> 

//JQUERY AJAX CODE BELOW 

<script type="text/javascript"> 
$(function(){ 

refresh_shoutbox(); 
setInterval("refresh_shoutbox()", 10000); 

var running = false; 

$("#message").keypress(function(e){ 
    if (e.which == 13 && running === true){ 
     return false; 
    } 
}); 

$("#submit").click(function(){ 
    if ($("#message").val() != ''){ 
     running = true; 
     $("#submit").attr("disabled","disabled"); 
     setTimeout(function(){ 
     $("#submit").removeAttr("disabled") 
     running = false; 
     }, 2000); 
     }else{     
     return false; 
     } 

    var name = $("#name").val(); 
    var message = $("#message").val(); 
    var data = 'name=' + name + '&message=' + message; 

    $.ajax({ 
     type: "POST", 
     url: "shout.php", 
     data: data, 
     success: function(html){ 
      $("#shoutmessages").slideToggle(0, function(){ 
      $(this).html(html).slideToggle(0); 
      $("#message").val(""); 
      }); 
     } 
    });  
    return false;  
}); 
}); 

function refresh_shoutbox(){ 
    var data = 'refresh=1'; 
    $.ajax({ 
     type: "POST", 
     url: "shout.php", 
     data: data, 
     success: function(html){ 
     $("#shoutmessages").html(html); 
    } 
    }); 
} 

回答

1

因为这一切都是通过AJAX反正这样做,你可能会发现它更容易只是不包括<form>元素可言。

这样就避免了<form>中表单元素发生的所有烦人的浏览器特定行为,例如,如果按下<button>,就会自动提交表单。

你说过,当你在其他浏览器中删除它时,回车键不起作用 - 例如,你是否从Chrome或Safari JS调试控制台收到任何错误?

+0

由于某种原因,在IE和Chrome和Firefox中,我不能通过按回车键提交消息,只能通过点击提交按钮,我认为它在IE中工作,但回车键不工作其中的实际。不要从这些错误。 – user970117

+0

那么在你的代码中,当按下回车键时,你指示它'返回false; ',你期望它做什么? – element119

+0

多数民众赞成只有当按钮被禁用,它会返回false,因为因为var运行将被设置为true。 – user970117