2

我正在设计一个基于 AJAX 的喊话箱。 http://businessgame.be/shoutbox.php

该脚本在 google chrome 中完美运行,但其他浏览器的行为不像我预期的那样。

要喊出一条新消息,有一个表单,它拥有一个输入文本字段。按下回车时,表单正在提交,所以我省略了提交按钮,因为按下回车就足够了。

<form method="POST" action="" onsubmit="javascript: return shout();" enctype="multipart/form-data">
<input type="text" style="width: 100%;" name="txtShout" id="txtShout" maxlength="600" autocomplete="off" title="Shout!" placeholder="Shout!">
</form>

喊叫函数如下所示:

function shout() {
alert("test");
        // Post shout and clear textField
        if(getLength("txtShout")) {
            AjaxUpdate("./includes/shout.php?message=" + getItemValue("txtShout"), refreshShoutBox);
            setItemValue("txtShout", "");
        }

        // Stop submit
        return false;
    }

通常,脚本应该调用喊叫函数,AJAX 会发送一个添加喊叫的请求,然后返回 false,这样表单就不会被提交。

但在除 Google Chrome 之外的所有浏览器中,表单都会被提交。我在函数中放入了一个 alert() 来检查它是否被调用或编码错误,但没有显示警报。

4

1 回答 1

1

好吧,由于某种原因,我无法让 onsubmit 功能在其他浏览器中工作。与其拼命地继续寻找修复它,不如决定采用不同的方法。现在我只是在文本框中添加了一个侦听器,以检查何时按下某个键是否是回车键,然后调用该函数。

这似乎有效,但仍然必须删除表单,否则它会被提交^^。

所以现在我得到了这样的东西:

function shoutEnterListener() {
    // Get object
    var domObject = document.getElementById("txtShout");

    // Get shoutbox html code
    if(domObject) {
        domObject.onkeydown = shoutEnter;
        domObject.onkeypress = shoutEnter;
    }
}

function shoutEnter(e) {
    var keyCode;

    // Check which key has been pressed
    if (window.event) {
        keyCode = window.event.keyCode;
    } else {
        keyCode = e.which;
    }

    // If enter, shout!
    if (keyCode == 13) {
        shout();
    }
}

sayEnterListener() 在 init 函数中被调用。这也证明没有任何编码错误,而纯粹是根本没有调用函数。

如果您仍然找到上一个问题的解决方案,请告诉我,因为这是一个有点繁琐和密集的代码。

于 2011-10-10T13:56:25.633 回答