下拉菜单加载选择,而不是页面加载

问题描述:

我有以下页面2下拉过滤器。当用户在下拉菜单1中选择和选项时,会显示下拉菜单2下的数百个选项列表供用户选择。尽管此解决方案有效,但首次访问时页面加载的负载非常重要。下拉菜单加载选择,而不是页面加载

有没有一种方法可以让用户在下拉菜单中选择一个选项时加载iframe,而不是在页面加载时一次全部加载iframe?

这是JSFiddle。任何帮助真的会被赞赏。

https://jsfiddle.net/wp9ke0td

感谢,

$(document).ready(function() { 
    $("select").change(function() { 
    $(this).children("option:selected").each(function() { 
     if ($(this).attr("value") == "catlist") { 
     $(".queuelist").hide(); 
     $(".agentlist").hide(); 
     $(".queuecard").hide(); 
     $(".agentcard").hide(); 
     $(".catlist").show(); 
     } 
     if ($(this).attr("value") == "queuelist") { 
     $(".agentlist").hide(); 
     $(".agentcard").hide(); 
     $(".queuecard").hide(); 
     $(".queuelist").show(); 
     $(".queuelist select").change(); 
     } 
     if ($(this).attr("value") == "agentlist") { 
     $(".queuelist").hide(); 
     $(".agentcard").hide(); 
     $(".queuecard").hide(); 
     $(".agentlist").show(); 
     $(".agentlist select").change(); 
     } 
     if ($(this).attr("value") == "MPFUC") { 
     console.log("FUC"); 
     $(".agentcard").hide(); 
     $(".queuecard").hide(); 
     $(".MPFUC").show(); 
     } 
     if ($(this).attr("value") == "MPFLC") { 
     console.log("FlC"); 
     $(".agentcard").hide(); 
     $(".queuecard").hide(); 
     $(".MPFLC").show(); 
     } 
     if ($(this).attr("value") == "claire") { 
     $(".agentcard").hide(); 
     $(".queuecard").hide(); 
     $(".claire").show(); 
     } 
     if ($(this).attr("value") == "darren") { 
     $(".agentcard").hide(); 
     $(".queuecard").hide(); 
     $(".darren").show(); 
     } 

    }); 
    }).change(); 
}); 
+0

在ajax调用上加载内容怎么样? –

+0

所以我在这方面比较新。你会有机会帮助一些代码吗? –

+0

我建议你需要自己尝试一下。它非常简单。 –

你有两个选择,以增加你的脚本的速度:在主选择使用AJAX改变

  1. 负载孩子选择数据。

    更重要的是,您可以先加载并渲染页面。在全部加载后,启动加载(使用ajax)主选择选项,或者在用户单击它后加载主选择选项。

  2. 使用vanillaJS代替jquery,你会惊讶地发现它是如何被禁食的。

+0

所以我在这方面比较新。你会有机会帮助一些代码吗? –

下面是一个例子jsfiddle

第1步:保存选项数据键值列表。

var categoryList = [{key: -1, value: 'Select Category...'}, {key: 'work', value: 'Work Queues'}, {key: 'agent', value: 'Agents'}]; 
var workList = [{key: -1, value: 'Select Queue...'}, {key: 'google.someurl.com', value: 'Google'}, {key: 'yahoo.someurl.com', value: 'Yahoo'}]; 
var agentList = [{key: -1, value: 'Select Agent...'}, {key: 'claire.someurl.com', value: 'Claire'}, {key: 'darren.someurl.com', value: 'Darren'}]; 

var keyValueLists = { 
    category: categoryList, 
    work: workList, 
    agent: agentList, 
} 

第2步: 通过代码设置你的选择选项(使用键值列表)。

function setSelect(queryString, listName){ 
    var element = $(queryString); 
    element.empty(); 

    if(!listName || listName.length <= 0){ 
    element.hide(); 
    }else{ 
    getKeyValueList(listName, function(list){ 
     for(var i = 0; i < list.length; i++){ 
     var l = list[i]; 
     element.append($('<option></option>').attr("value",l.key).text(l.value)); 
     } 
     element.show(); 
     console.log('setting select: ' + queryString, list); 
    }); 
    } 
} 

第3步:取关键值列表,如果你不已经将其缓存。

function getKeyValueList(name, callback){ 
    if(!keyValueLists.hasOwnProperty(name)){//if true, keyValue list is not chached 
    //fetch keyValueList with ajax 
    //cache list -> add as property on keyValueLists 
    //callback(keyValueLists[name]); 
    }else{ 
    callback(keyValueLists[name]); 
    } 
} 

步骤4: iframe的设置网址。

function setIframe(url){ 
    var element = $('iframe.someiframe'); 
    if(!url){ 
    element.hide(); 
    }else{ 
    element.show(); 
    element.attr('src', url); 
    } 
} 
+0

感谢你们,这是一个非常有用的出发点:)因为我在这方面真的很新奇,你们能否提供一些结果的例子,因为我真的很新颖。例如,当我选择Claire或Darren时,如何显示iframe?在我的早期版本中,我有这样的选项:。这些去哪里? –

+0

这行'$('').attr(“value”,l.key).text(l.value)'做到了这一点。 钥匙可以是任何东西,可以说'克莱尔'。价值可以是任何事情,让我们说'克莱尔'。把key看作是显示名称的id和value。 在第二次选择的onchange事件中,我从它们中获取了值,并且可以使用它来将iframe的url设置为任何你喜欢的。 '$('iframe.someclass')。attr('src','http://someurl.com')' –

+0

在示例中,查看控制台。每次有趣的事情发生时我都会记录。 –