2012-02-08 23 views
5

felixnagel'den jquery ui selectmenu'yu kullanmak istiyorum. çalışır ancak jquery'nin selectmenu için her zaman çok küçük bir genişlik ayarlaması problemi vardır, böylece açık/kapalı simgesi içeriğin üstünde görünür. Ben komut selectmenu() genişliğini ayarlayabildiğimi biliyorum ama birkaç farklı selectmenus var, bu yüzden ben seçim verebilecek ne kadar genişlikte doğru hesaplama üzerinde etkili olabileceğini bilmek istiyorum, böylece verebilirim genişlik için ek bir px.jquery ui selectmenu: Dinamik genişliği nasıl doğru şekilde ayarlayabilirim?

Bunu .js dosyalarında bulmaya çalıştım, ancak şu andan beri bununla başarılı olmadım. Umarım birinizin burada ne yapabileceğime dair bir fikri vardır.

Ruven çok teşekkür ederim

cevap

7

Belki böyle bir şey size Her seçme elemanı yürümek

<select width="200"> 
    <option>Small</option> 
</select> 


$(document).ready(function(){ 
    $.each($('select'), function() { 
     $(this).selectmenu({ width : $(this).attr("width")}) 
    }) 
}) 

yardımcı olacak ve seçme içinde birlikte belirtmek possibilty olacak öğe genişliği özniteliği. Belki de yararlı buluyorsunuz ve bunu değiştirebiliyorsunuz.

Düzenleme 1: Ya da sadece kod ile ekstra bir şey eklemek istiyorsanız gibi bir şey kullanabilirsiniz (ben CSS ile de yapabilir misin):

<select> 
    <option>Small</option> 
</select> 


$(document).ready(function(){ 
    $.each($('select'), function() { 
     $(this).selectmenu({ width : $(this).width() + 100}) // You just take the width of the current select and add some extra value to it 
    }) 
}) 
+0

Oh man. Ne yazık ki bu harika fikri yoktu. Hızlı yardımınız için çok teşekkür ederim. Sth düşündüm. benzer, ancak başlatma işlemini doğrudan manipüle etmeyi tercih etti. Neyse bazen daha hızlı seçmeliyim ve "kirli" idi. Teşekkür ederim. –

0

Önceki çözümler neredeyse bulmuşlar.

Sen css genişliğini ayarlayabilir ve bunun gibi selectmenu aramak zorunda:

$('select').selectmenu({ width : $(this).css('width')}); 
+1

$ ('select'). Selectmenu ({width: $ (this) .css ('width')}); Yakalanmayan TypeError: 'in' operatörünü tanımlanamayan 'display' için kullanamazsınız –

10

Bu basit olduğunu ve içeriğine göre ayarlamak yapar.Bu açıklamada belirtilen genişlikleri farklı öğeleri seçerken sorunu önlemek için sabit kodlanmış genişliği kullanan

$("select").selectmenu({ width : 'auto'}); 


:

$("select").selectmenu({ width : 250}); 
+3

Bu seçenekle, o anda seçili olana doğru seçim genişliğini ayarlar. Bu nedenle, genişliğini değiştirmeye devam eder ve kullanıcı arayüzünü bozar. seçenekler penceresinin kenarlarını seçerek eşleşmeyecek kadar bit .. –

+0

@Robert: Kinolis cevabını kullandım ama aşağıdakiler için sabit bir değer kullandım: Yani sadece $ ("select") .selectmenu (genişlik: 250}); örneğin. – Martin

0

yüzdeleri için, şu şekildedir:

CSS'nizdeki yüzdeyi bildirin:

select{ 
    width: 100%; 
} 

Ve JavaScript'inizin:

jQuery("select").selectmenu(
     { 
      width: jQuery(this).attr("width"), 
     } 
); 
+0

bu yanıt yanlış, jQuery.attr() işlevi ** eleman öznitelikleri ** css özellikleri için değil. maalesef, css'den yüzde boyutu almanın kolay bir yolu yoktur. Şu soruya bakın: http://stackoverflow.com/questions/744319/get-css-rules-percentage-value-in-jquery fikir: elementlerin göreceli genişliklerini almak ve genişliğinizi şöyle tanımlamak için fonksiyon yaratabilirsiniz: width: function() {get_element_relative_width (this)} –

1

Bir hack tür ve ben bunun ne kadar sağlam bilmiyorum ama başarıyla belirli bir durumda bu kullandım:

$("select").each(function(){ 
    var $this=$(this); 
    $this.selectmenu(); 
    var menu=$this.selectmenu("menuWidget"); 
    var button=$this.selectmenu("widget"); 
    button.click(); 
    var longest=null; 
    menu.children("li").each(function(){ 
     var $this=$(this); 
     if(longest==null || longest.text().length < $this.text().length){ 
      longest=$this; 
     } 
    }); 
    menu.css("width","auto"); 
    var width=longest.mouseover().width(); 
    button.click(); 
    var innerButton = button.find(".ui-selectmenu-text"); 
    var paddingRight=parseFloat(innerButton.css("padding-right")); 
    var paddingLeft=parseFloat(innerButton.css("padding-left")); 
    var total=width+paddingLeft+paddingRight + 2; 
    $this.selectmenu("option","width", total); 
}) 

yılında ne yaptığını Özetle şudur: doldurulur ve dışarı atılır, böylece

  • bulmak menüsünü açın en uzun eleman
  • en uzun elemanın üzerine gelip almak için otomatik menü genişliğini ayarlamak onun genişliği
  • menü kapatmak
  • bilgisayarlı genişliğine eklemek düğme widget sol ve sağ dolgu olsun En uzun öğenin ve
0 (Ben sınırlar falan bir hak) genişliği olarak
  • iyi ölçmek için 2 pikseller ekleyerek kullanan

    Sadece jQuery-ui'nin işleri dahili olarak nasıl yaptığına bağlı olduğundan, herhangi bir güncellemeye dayanabilir.

    Bu keman'a bakın: http://jsfiddle.net/txo1mvhn/2/

+0

Harika çözüm! Diğerlerinden daha iyi! Bunu bulduğuma sevindim. –

İlgili konular