2011-03-14 59 views
1

使用sexy-combo與國家,另一個與城市。每當用戶選擇一個國家時,我都會使用Ajax填充第二個組合框,並且不進行任何回發。jQuery刷新SexyCombo級聯輸入

問題是,性感組合使用我的html選擇僅在頁面加載時第一次呈現漂亮的組合框。當我更新城市的HTML選項中的項目時,它不會被刷新,所以沒有值...

你知道我必須調用什麼函數來刷新組合框,就像它會我做回傳時會刷新嗎?

任何提示都非常受歡迎!非常感謝。

+0

你可以放在一起演示頁?理想情況下,在[JS Fiddle](http://jsfiddle.net/)或[JS Bin](http://jsbin.com/)上,但如果沒有鏈接到您自己網站上的實時頁面,最少的,有幫助的,這樣我們就可以看到發生了什麼。 –

回答

4

什麼,我缺的是調用這個函數:

$.sexyCombo.changeOptions($('#cities')[0]); 

這強制城市的性感combobox被渲染後,我c掛起了使用javascript綁定的html選擇控件的選項。

@Sarzniak和@Majid:非常感謝你的回答,但這不是我想要的,也許我沒有把自己弄清楚。

+0

在這種情況下,你應該接受你自己的回答:) – jensgram

0

嘗試使用jQuery的'live'綁定功能。 當你刷新你的物品時,那麼這些事件不會再綁定到你的物體上。

例如

$("myItem").live("click",function(){ codeHere }); 

這也結合了 'click' 事件到你的Ajax創建的項目。

0

如果您的舊代碼如下所示:

$(document).ready(function() { 
    $('.sexify').sexify({options}); 
    $('select[name="countries"]').change(function() { 
    var selected_country = $(this).val(); 
    $('select[name="cities"]').load('cities.php?country=' + selected_country); 
    }); 
}); 

那麼所有你需要的是增加一個功能,像這樣.load的回調:

$(document).ready(function() { 
    $('.sexify').sexify({options}); 
    $('select[name="countries"]').change(function() { 
    var selected_country = $(this).val(); 
    $('select[name="cities"]').load('cities.php?country=' + selected_country, function() { 
     $(this).sexify({options}); 
    }); 
    }); 
}); 
0

在腳本中創建另一種方法,例如,下面的 「changeOptions」:

custom_update: function($select) { 
    $select = $($select); 
    $select.each(function() { 
     if ("SELECT" != this.tagName.toUpperCase()) { 
      return; 
     } 

     var my_text = $("#"+ this.id + " option:selected").text(); 
     var my_val = $("#"+ this.id + " option:selected").val(); 
     var $this = $(this); 
     var $wrapper = $this.parent(); 
     var $input = $wrapper.find("input[type='text']"); 
     var $listWrapper = $wrapper.find("ul").parent(); 

     $listWrapper.removeClass("visible"). 
     addClass("invisible"); 
     $wrapper.css("zIndex", "0"); 
     $listWrapper.css("zIndex", "99999");    

     //$input.val(""); 
     $wrapper.data("sc:optionsChanged", "yes"); 
     var $selectbox = $this; 
     $selectbox.parent().find("input[type='text']").val($selectbox.find("option:eq(" + my_val + ")").text()); 
     $selectbox.parent().data("sc:lastEvent", "click"); 
     $selectbox.find("option:eq(" + my_val + ")").attr('selected','selected'); 
    }); 
}, 

,並調用它像:

$.sexyCombo.custom_update($("#myselectlist"));