多个动态ajax选择框

时间:2012-11-13 10:28:11

标签: jquery html ajax

我正在使用4个选择框搜索产品,使用jQuery我使用ajax调用填充每个框。这一切都有效,但我现在想要使用预定的搜索条件(因此它已经知道要使用哪个选定的选项)来填充。

e.g。 产品来源(新鲜,冷冻) 如果选择了Fresh,则在下一个选择框中填充依赖于此选项的列表。 产品类型(水果...) 产品(苹果......) 颜色(红..) 等

然后使用所选产品完成股票搜索,因此在这种情况下,它将是新鲜水果苹果红,可能会给出id = 5.

工作正常,但现在我想将产品来源,产品类型,产品,颜色传递到搜索中,它会填充选择框和其他选项。 我遇到的问题是我在选择框上使用更改事件来触发在下一个加载之前触发的ajax。

我希望这是有道理的:S

     $("#form_model").change(function(){
    var val = $(this).val();
    if (val != '')
   populateStockItems($("#form_cat").val(),$("#form_sup").val(),val);                  
})

  function  populateStockItems(proid,suppid,modelid){
    var datain ={
    'ProdCode':proid,
    'SuppCode':suppid,
    'Range':modelid
};
getAjax('stockSearch',datain,function(data){

    if(data.result=="success"){             
        var catcbb = $("#form_item");
        catcbb.selectmenu('enable');
        catcbb.empty();
        catcbb.append($('<option></option>').attr("value", '').text(''));
        $.each(data[0].items, function () {
            catcbb.append($('<option></option>').attr("value", this.itemCode).text(this.itemDescription));
        });
        if (data[0].items.length ==1)
            catcbb.get(0).selectedIndex = 1
        catcbb.trigger("change");
    }
    else
    {

    }
})
 }

编辑 - 它搜索产品很好,但我现在需要使用已知产品预填充过滤器,我有所有过滤器值。 我想我会一次做一个选择并“等待”通过ajax填充该框。

2 个答案:

答案 0 :(得分:0)

如果问题是如何从代码中更改select并触发ajax调用,则可以执行以下操作:

$('#products').val( 5 ).change();
 /* OR */
 $('#products').val( 5 ).trigger('change');

如果我正确理解问题,那么在修改值之后触发change应该是您所需要的全部

答案 1 :(得分:0)

这就是我做的, 将选择框的默认值设置为随机的,并且从不使用,例如高次谐波和安培; hg43 如果该选择框的值= hhg&amp; hg43,那么ajax查询尚未完成。

var control =$('#form_cat');
    if(control.first().val()=='hhg&hg43')
        waitForStock(control)
    if(control.first().val()!='hhg&hg43')
    {
        control.val(ProductGroupCode);
        control.trigger("change");
        populateStockSuppliers(control.val());
    }
    else if (control.first().val()=='hhg&hg43'){
        alert('Error getting category');
    }

 function waitForStock(control){
for ( var i=0;i>20 ;i++) 
{
    if(control.val()!='hhg&hg43')
        return;
    window.setTimeout(waitForStock, 300);
} }