【问题标题】:Multipul dynamic ajax select boxes多个动态ajax选择框
【发布时间】:2012-11-13 10:28:11
【问题描述】:

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

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

然后使用所选产品完成库存搜索,因此在这种情况下,它将是 Fresh fruit apples red,它可能给出 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 填充该框。

【问题讨论】:

  • 发布用于进行 ajax 调用的更改处理程序的代码
  • 还有 ..re-reading 问题您是否尝试从代码的另一部分加载选择并传入 id 值?不是 100% 清楚意图是什么

标签: jquery html ajax


【解决方案1】:

如果问题是如何从您的代码中更改 select 并触发 ajax 调用,您可以这样做:

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

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

【讨论】:

  • 感谢@charlietfl 抽出时间来回答,不幸的是这不是我需要的
【解决方案2】:

这就是我所做的, 将选择框的默认值设置为随机且从未使用过的值,例如hhg&hg43 如果该选择框的值 = hhg&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);
} }

【讨论】:

  • 这里有几件事是不好的做法。您似乎在页面中重复 ID,否则您不会寻找 control.first()。 ID 必须是唯一的。如果正确使用AJAX的成功回调来处理数据,则无需设置waitForStock之类的函数
  • 我不太清楚为什么我有 control.first,我用它来获取列表中的第一个值,但我不需要它,我只有一个 id。回调是对的,这会更好,然后我可以将每个更改嵌套在回调中,但当时这对我有用。
  • 我还必须在 populateStockSuppliers 等上添加回调
猜你喜欢
  • 2016-11-16
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2023-03-16
相关资源
最近更新 更多