Ajouter un attribut sélectionné à l'option sélectionnez menu avec jQuery
Je suis en train de faire un menu de choix de plugin pour remplacer le moche par défaut permet de sélectionner et d'être cohérente dans les différents OS.
Voici la démo (seulement firefox et webkit)
http://spacirdesigns.com/selectMenu/
Elle fonctionne déjà, mais je vais avoir des problèmes pour l'attribution de la "sélection" de l'attribut de l'option. Le code fonctionne avec n'importe quel autre attribut, mais je ne peux pas le faire fonctionner avec l'attribut sélectionné.
Cela fonctionne:
select.find('option')
.removeAttr('whatever')
.eq(index).attr('whatever', 'hello');
Ce n'est pas le cas:
select.find('option')
.removeAttr('selected')
.eq(index).attr('selected', 'selected');
Et voici le code pour l'instant:
(function($){
$.fn.selectMenu = function() {
var select = this;
select.hide();
var title = select.attr('title');
var arrow = 'img/arrow.png';
var items = '';
select
.children('option')
.each(function(){
var item = $(this).text();
if ($(this).val() != '') {
$(this).attr('value', item);
}
items += '<li>' + item + '</li>'
});
var menuHtml =
'<ul class="selectMenu">' +
'<img src="' + arrow + '" alt=""/>' +
'<li>' + title + '</li>' +
'<ul>' + items + '</ul>' +
'</ul>';
select.after(menuHtml);
var menu = $(this).next('ul');
var list = menu.find('ul');
menu
.hover(function(){}, function(){
list.hide();
})
.children('li').hover(function(){
list.show();
});
menu.find('ul li').click(function(){
var index = $(this).index();
menu.children('li').text($(this).text());
select.find('option')
.removeAttr('selected')
.eq(index).attr('selected', 'selected');
list.hide();
});
};
})(jQuery);
Avez-vous essayé d'utiliser
je sais que ce plugin prend en charge sélectionné: programmingdrunk.com/current-projects/dropdownReplacement/#use
J'ai essayé ce code sur votre page de test dans FF 4: fonctionne très bien pour moi! Attribut non affectés directement dans FireBug, mais la valeur et le choix de l'option de sélectionner est changé à chaque fois j'ai changé attribut index.
Ouais, j'ai juste ajouté un bouton d'alerte de l'état sélectionné et il fonctionne juste ne pas afficher dans firebug. Qui a été me rend fou. De vérifier la démo spacirdesigns.com/selectMenu
.attr('selected', true)
?je sais que ce plugin prend en charge sélectionné: programmingdrunk.com/current-projects/dropdownReplacement/#use
.attr('selected', true)
ne fonctionne pas non plus.J'ai essayé ce code sur votre page de test dans FF 4: fonctionne très bien pour moi! Attribut non affectés directement dans FireBug, mais la valeur et le choix de l'option de sélectionner est changé à chaque fois j'ai changé attribut index.
Ouais, j'ai juste ajouté un bouton d'alerte de l'état sélectionné et il fonctionne juste ne pas afficher dans firebug. Qui a été me rend fou. De vérifier la démo spacirdesigns.com/selectMenu
OriginalL'auteur elclanrs | 2011-04-26
Vous devez vous connecter pour publier un commentaire.
Découvrez cette précédente réponse détaillée sur DONC:
Si vous voulez vraiment maintenir la sortie HTML avec l'attribut sélectionné, et pas seulement jQuery maitaining le droit selectedIndex l'attribut de l'élément select, vous pouvez pirater avec l'original settAttr() fonction:
Mais dès que vous gardez à l'aide de méthodes jQuery pour val (),': selected', vous devriez pas obtenir n'importe quel problème, vous pourriez avoir de problème seulement si vous êtes l'analyse HTML de trouver attribut sélectionné, quelque chose que vous devriez pas faire, jamais.
oui, c'est le droit de référence.
OriginalL'auteur regilero
De jQuery 1.6 "Pour récupérer et modifier les DOM des propriétés telles que le cochée, sélectionnés ou désactivé état de forme des éléments, utilisez la .prop (), méthode".
Merci @sidarcy. Il m'a beaucoup aidé. Sûr, Il devrait aller sur le dessus.
Ne devrait-elle pas être
.prop("selected", true)
? Comme je me souviens, lors de l'utilisation de l'ancienne approche, pour ce cas, il doit être.attr("selected", "selected")
.OriginalL'auteur sidarcy
Compte tenu de votre dernier commentaire, je suppose que votre problème est firebug, pas votre code. Pourquoi cela fonctionne avec d'autres attributs à l'exception des "sélectionnés", c'est qu'en sélectionnant une option dans la liste déroulante de ne pas modifier l'attribut sélectionné dans les DOM. Je vous assure, il n'y a rien de mal avec votre code.
OriginalL'auteur Kristoffer Lundberg