1

ユーザーがメニューからオプションの 1 つを選択 (マウスを放す) したときに、プルダウン メニューにフォームを投稿させようとしています。このコードは FF では問題なく動作しますが、Safari では何らかの理由でフォームが送信されません。jquery を使用してコードを書き直し、jquery の .submit() 実装がブラウザーの癖をより適切に処理するかどうかを確認しました。同じ結果、FF で動作しますが、サファリでは動作しません。

次のスニペットは同じページからのもので、django テンプレート言語が混在しています。

バニラjsの試みは次のとおりです。

function formSubmit(lang) {
    if (lang != '{{ LANGUAGE_CODE }}') {
        document.getElementById("setlang_form").submit();
    }
}

jqueryの試みは次のとおりです。

$(document).ready(function() {
    $('#lang_submit').hide()
    $('#setlang_form option').mouseup(function () { 
        if ($(this).attr('value') != '{{ LANGUAGE_CODE }}') { 
            $('#setlang_form').submit()
        } 
    });
});

フォームは次のとおりです。

<form id="setlang_form" method="post" action="{% url django.views.i18n.set_language %}">
    <fieldset>
    <select name="language">
    {% for lang in interface_languages %}
        <option value="{{ lang.code }}" onmouseup="formSubmit('{{ lang.name }}')" {% ifequal lang.code LANGUAGE_CODE %}selected="selected"{% endifequal %}>{{ lang.name }}</option>
    {% endfor %}
    </select>
    </fieldset>
</form>

私の質問は、これを Safari で機能させるにはどうすればよいですか?

4

3 に答える 3

2

おそらく、代わりに (または同様に)のonchangeイベントを使用する必要があります。<select>

于 2008-12-02T08:25:32.747 に答える
1

コードは次のようになります。

<form id="setlang_form" method="post" action="{% url django.views.i18n.set_language %}">
    <fieldset>
    <select name="language" onchange="formSubmit(this)">
    {% for lang in interface_languages %}
        <option value="{{ lang.code }}" {% ifequal lang.code LANGUAGE_CODE %}selected="selected"{% endifequal %}>{{ lang.name }}</option>
    {% endfor %}
    </select>
    </fieldset>
</form>

値を取得するには:

function formSubmit(theForm)
{
 .... theForm.options[theForm.selectedIndex].value
}

jqueryでもできます:

$(document).ready(function() {
    $('#lang_submit').hide()
    $('#setlang_form select').change(function () { 
        ....     $("select option:selected").text() ....  
        } 
    });
});

Jquery での変更イベントについては、こちらを参照してください: http://docs.jquery.com/Events/change

于 2008-12-02T08:29:38.247 に答える
0

xxx.submit() も私にとってはうまくいかないようです。シンプルですが、醜い修正は、外部 JS ファイルではなく、ページの HEAD タグで送信を行う関数を使用することです。 。参加する()

理由を聞かないでください。しかし、これは、submit() 関数を使用してサファリに実際に送信させる唯一の方法です。

于 2008-12-04T03:05:21.270 に答える