多个jQuery函数?

时间:2011-07-13 14:10:37

标签: jquery post

我在我的网站上聊天,运行在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] + "&nbsp;<b>" + val[1] + "</b>:&nbsp;" + val[2] + "<br />";
            $("#actual").append(test);
        });
        $("#actual").scrollTop(0);
    });

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

3 个答案:

答案 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会触发输入所在表单的提交以及您可能拥有的任何处理程序。