2

私はAJAXベースのシャウトボックスでデザインしています。 http://businessgame.be/shoutbox.php

スクリプトはグーグルクロームで完全に動作しますが、他のブラウザは私が期待するように動作しません。

新しいメッセージを叫ぶために、入力テキストフィールドを所有するフォームがあります。Enterキーを押すとフォームが送信されますが、Enterキーを押すだけで十分なので、送信ボタンを省略しました。

<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;
    }

通常、スクリプトはshout関数を呼び出す必要があり、AJAXはshoutを追加するリクエストを送信してから、フォームが送信されないようにfalseを返します。

ただし、Google Chromeを除くすべてのブラウザでは、フォームはとにかく送信されます。関数にalert()を入れて、呼び出されたかコーディングミスがないかを確認しましたが、アラートが表示されません。

4

1 に答える 1

1

さて、どういうわけか、他のブラウザでonsubmit関数を動作させることができませんでした。必死にそれを修正しようとする代わりに、別のアプローチをとることに決めました。ここで、テキストボックスにリスナーを追加して、キーが押されたときにそれがEnterキーであるかどうかを確認し、その関数を呼び出します。

それはうまくいったようですが、それでもフォームを削除する必要がありました。そうしないと、送信されるためです^^。

だから今私はこのようなものを手に入れました:

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();
    }
}

shoutEnterListener()はinit関数で呼び出されます。これは、コーディングエラーがまったくなかったことも証明していますが、純粋に関数がまったく呼び出されていません。

それでも前の問題の解決策が見つかった場合は、私に知らせてください。これは少し退屈で集中的なコードです。

于 2011-10-10T13:56:25.633 に答える