jQuery刷新SexyCombo级联输入

时间:2011-03-14 17:52:15

标签: jquery combobox refresh

sexy-combo与国家/地区一起使用,将另一个与城市一起使用。每当用户选择一个国家时,我会用相应的Ajax城市填充第二个组合框,而不进行任何回发。

问题是性感的组合只在第一次加载页面时使用我的html选择呈现了漂亮的组合框。当我更新城市的html选项中的项目时,它没有被刷新,所以那里没有值......

你知道我必须调用哪个函数来“刷新”组合框,就像我在回发时会刷新一样吗?

非常欢迎任何提示!非常感谢。

4 个答案:

答案 0 :(得分:4)

我缺少的是调用此函数:

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

在我更改了使用javascript绑定的html选择控件的选项后,这会强制渲染城市的性感组合框。

@Sarzniak和@Majid:非常感谢你的答案,但这并不是我想要的,也许我还没有说清楚。

答案 1 :(得分:0)

尝试使用jQuery的'live'绑定功能。 当您刷新项目时,事件不会再绑定到您的对象。

例如

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

这也会将'click'事件绑定到ajax创建的项目。

答案 2 :(得分: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});
    });
  });
});

答案 3 :(得分: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"));