Firefox обрабатывает xxx.submit (), Safari - нет ... что можно сделать? - PullRequest
1 голос
/ 02 декабря 2008

Я пытаюсь заставить выпадающее меню опубликовать форму, когда пользователь выбирает (отпускает мышь) одну из опций в меню. Этот код прекрасно работает в 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?

Ответы [ 3 ]

2 голосов
/ 02 декабря 2008

Вам, вероятно, следует использовать onchange событие <select> вместо (или также).

1 голос
/ 02 декабря 2008

Код будет:

<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

0 голосов
/ 04 декабря 2008

xxx.submit () тоже никогда не работал для меня. Простое, но некрасивое исправление состоит в том, чтобы иметь функцию, которая выполняет отправку в теге HEAD страницы, а не во внешнем файле JS, и использовать document.getElementById ('what_the_id_of_the_form_is) .submit вместо определения переменной, а затем делать var .submit ()

Не спрашивай почему. Но это единственный способ заставить сафари отправлять данные с помощью функции submit ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...