2008-12-02 9 views
1

J'essaie de faire un menu déroulant poster un formulaire lorsque l'utilisateur sélectionne (libère la souris) sur l'une des options du menu. Ce code fonctionne très bien dans FF mais Safari, pour une raison quelconque, ne soumet pas le formulaire. J'ai réécrit le code en utilisant jquery pour voir si l'implémentation .submit() de jquery traitait mieux les caprices du navigateur. Même résultat, les travaux en FF ne fonctionnent pas en safari.Firefox gère xxx.submit(), Safari ne ... ce qui peut être fait?

Les extraits suivants sont de la même page, qui a un langage de template django mélangé

est ici la tentative de la vanille.

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

est ici la tentative jquery:

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

et voici le formulaire:

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

Ma question est, comment puis-je obtenir ce travail dans Safari?

Répondre

1

Le code serait:

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

Pour obtenir la valeur:

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

Vous pouvez le faire avec jquery aussi:

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

Regardez ici pour en savoir sur l'événement de changement avec Jquery: http://docs.jquery.com/Events/change

2

Vous devriez probablement utiliser l'événement onchange du <select> à la place (ou aussi bien).

+0

Je vote pour "plutôt". Pas besoin d'attraper la souris sur une option. Ce n'est même pas judicieux, car les événements déclenchés par le clavier vont être manqués. – Tomalak

0

xxx.submit() n'a jamais semblé fonctionner pour moi non plus. Simple, mais la réparation laide est d'avoir la fonction qui fait le soumettre dans la balise HEAD de la page par opposition à un fichier JS externe, et, utilisez document.getElementById ('quelquechose_le_id_of_the_form_is) .submit par opposition à la définition d'un var puis faire var .submit()

Ne demandez pas pourquoi. Mais c'est la seule façon que je puisse faire pour soumettre un safari en utilisant la fonction submit().

Questions connexes