Share via


SharePoint 2013: Cascading drop-down with jQuery SPServices

Introduction

This feature is not available out-of-the-box in SharePoint. Take two drop-downs in your custom page (content editor web part) as:

<select id="ddlCountry"></select> and other drop-down for state <select  id="ddlState"></select>

Implementation

Open the SPD 2013 and put the below code just under the first tag </SharePoint:UIVersionedContent>:

<script type="text/javascript" src="../../SiteAssets/jquery-1.11.0.min.wbr>js"></script> [Click here to download this library]
 
<script type="text/javascript" src="../../SiteAssets/jquery.SPServices-2014.02.min.js"></script> [Click here to download this library]
 
<script type="text/javascript" >
 
$(document).ready(function()
 
{
 
$("select[title= 'ddlCountry']").empty(); // do empty the first dropdown(country) on page load
 
bindDDLCountry();
 
//The on change event of Dropdown country
 
$("select[title= 'ddlCountry']").change(function()
 
{
 
var ddlCountrySelectedValue = $("select[title= 'ddlCountry'] option:selected").val();
 
if((ddlCountrySelectedValue != null) || (ddlCountrySelectedValue != 0 ))
 
{
 
getCascadingState(ddlCountrySelectedValue ); //Invoke this function for cascading states based on selected country
 
}
 
});//Closing of on Change Event of Dropdown country
 
});//closing of ready function
 
function bindDDLCountry()
 
{
 
var webServerURL = _spPageContextInfo.webServerRelativeUrl+"/"; //It takes full url as: https://ServerName.sharepoint.com/sites/SiteColl/SubSite
 
var camlQuerytext="";
 
$().SPServices({
 
operation: "GetListItems",
 
async: false,
 
listName: "CountryLst",
 
webURL: webServerURL,
 
CAMLRowLimit: 0,
 
CAMLViewFields: "<ViewFields><FieldRef Name='CountryName' /></ViewFields>",
 
CAMLQuery: camlQuerytext,
 
completefunc: function  (xData, Status){
 
$("select[title= 'C1']").append($("<option></option>").val("0").html("-Select Country-"));
 
$(xData.responseXML).SPFilterNode("z:row").each(function(){
 
var countryname = $(this).attr("ows_CountryName");
 
$("select[title= 'ddlCountry']").append($("<option></option>").val(countryname.replace('&','&')).html(countryname.replace('&','&')));
 
});//Closing of each function
 
}//Closing of completefunc function
 
});//Closing of SPServices
 
}
 
function getCascadingState(ddlCountrySelectedValue)
 
{
 
$("select[title= 'ddlState']").empty(); // do empty the second dropdown(state) here
 
var webServerURL = _spPageContextInfo.webServerRelativeUrl+"/";
 
var camlQuerytext="";
 
if(ddlCountrySelectedValue !="")
 
{
 
camlQuerytext="<Query><Where><Eq><FieldRef Name='CountryName' /><Value Type='Lookup'>"+ddlCountrySelectedValue+"</Value></Eq></Where </Query>";
 
}
 
else
 
{
 
camlQuerytext="<Query><OrderBy><FieldRef Name='ID' Ascending='FALSE' /></OrderBy></Query>";
 
}
 
$().SPServices({
 
operation: "GetListItems",
 
async: false,
 
listName: "StateLst",
 
webURL: webServerURL,
 
CAMLRowLimit: 0,
 
CAMLViewFields: "<ViewFields><FieldRef Name='StateName' /></ViewFields>",
 
CAMLQuery: camlQuerytext,
 
completefunc: function  (xData, Status){
 
$(xData.responseXML).SPFilterNode("z:row").each(function(){
 
var statename = $(this).attr("ows_StateName");
 
$("select[title= 'ddlState']").append($("<option></option>").val(statename).html(statename));
 
});//Closing of each function
 
}//Closing of completefunc function
 
});//Closing of SPServices function
 
}

Output