我已经使用http://spservices.codeplex.com做了一个级联下拉表单,但想要添加一个过滤器到第三级联下拉。因此,SPServices有一个名为CAMLQuery的函数,我可以在其中添加此过滤器,但我希望过滤器使用表单顶部下拉列表中的值来指定。
页面上给出的一个例子是:
CAMLQuery: "<Eq><FieldRef Name='Status'/><Value Type='Text'>Active</Value></Eq>"
我希望这个Status列从表单上某个字段的选择中获得它的值。这可能吗,我该怎么写呢?
编辑:我试图做一个资产列表与级联的选择,以找到正确的资产后,选择单位和部门。代码示例后,尝试下面的答案,并没有得到任何出现在"资产"选择器。有两个列表,一个包含Units和Departments,另一个包含带有要筛选的Department和Unit键的资产。如果我将"动态"查询替换为静态查询,例如:
CAMLQuery: "<Eq><FieldRef Name='Unit'/><Value Type='Text'>Unit 1</Value></Eq>"
资产显示为该单元过滤。当前代码:
<script language="javascript" type="text/javascript" src="../../Hidden/jquery-1.5.2.min.js"></script>
<script language="javascript" type="text/javascript" src="../../Hidden/jquery.SPServices-0.6.0.min.js"></script>
<script language="javascript" type="text/javascript">
var sCamlQuery = "";
$(document).ready(function() {
$().SPServices.SPCascadeDropdowns({
relationshipList: "Departments",
relationshipListParentColumn: "Unit",
relationshipListChildColumn: "Title",
parentColumn: "Unit",
childColumn: "Department",
completefunc: function() {
sCamlQuery = "<Eq><FieldRef Name='Unit'/><Value Type='Text'>" + $("select[title='Unit']").attr("spcascadedropdown_selected_") + "</Value></Eq>";
}
});
$().SPServices.SPCascadeDropdowns({
relationshipList: "Asset Database",
relationshipListParentColumn: "Department",
relationshipListChildColumn: "Title",
parentColumn: "Department",
childColumn: "Asset",
CAMLQuery: sCamlQuery
});
});
HTML: <tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader"><nobr>Unit</nobr></H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<span dir="none">
<select name="ctl00$PlaceHolderMain$g_c482307d_1a31_4129_8a0a_376d70562746$ff3_1$ctl00$Lookup" id="ctl00_PlaceHolderMain_g_c482307d_1a31_4129_8a0a_376d70562746_ff3_1_ctl00_Lookup" title="Unit">
<option selected="selected" value="0">(None)</option>
<option value="1">Unit 1</option>
<option value="2">Unit 2</option>
</select>
</span>¨
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader"><nobr>Department</nobr></H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<span dir="none">
<select name="ctl00$PlaceHolderMain$g_c482307d_1a31_4129_8a0a_376d70562746$ff4_1$ctl00$Lookup" id="ctl00_PlaceHolderMain_g_c482307d_1a31_4129_8a0a_376d70562746_ff4_1_ctl00_Lookup" title="Department">
<option selected="selected" value="0">(None)</option>
<option value="5">Administration</option>
<option value="4">IT</option>
<option value="1">Kitchen</option>
<option value="2">Production</option>
<option value="7">Production</option>
<option value="6">Sales</option>
<option value="3">Warehouse</option>
</select>
</span>
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader"><nobr>Asset</nobr></H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<span dir="none">
<select name="ctl00$PlaceHolderMain$g_c482307d_1a31_4129_8a0a_376d70562746$ff5_1$ctl00$Lookup" id="ctl00_PlaceHolderMain_g_c482307d_1a31_4129_8a0a_376d70562746_ff5_1_ctl00_Lookup" title="Asset">
<option selected="selected" value="0">(None)</option>
<option value="3">Computer</option>
<option value="2">Copy machine</option>
<option value="1">Dishwasher</option>
<option value="5">Dishwasher</option>
<option value="4">Oven</option>
</select>
</span>
</td>
</tr>
验证功能:
<script language="javascript" type="text/javascript" src="../../Hidden/jquery-1.5.2.min.js"></script>
<script language="javascript" type="text/javascript" src="../../Hidden/jquery.SPServices-0.6.0.min.js"></script>
<script language="javascript" type="text/javascript">
var sCamlQuery = "";
$(document).ready(function() {
$().SPServices.SPCascadeDropdowns({
relationshipList: "Departments",
relationshipListParentColumn: "Unit",
relationshipListChildColumn: "Title",
parentColumn: "Unit",
childColumn: "Department",
completefunc: function() {
sCamlQuery = window.alert("completefunc");//"<Eq><FieldRef Name='Unit'/><Value Type='Text'>"+ $("select[title='Unit'] option:selected").text() +"</Value></Eq>";
}
});
$().SPServices.SPCascadeDropdowns({
relationshipList: "Asset Database",
relationshipListParentColumn: "Department",
relationshipListChildColumn: "Title",
parentColumn: "Department",
childColumn: "Asset",
CAMLQuery: sCamlQuery
});
});
</script>
部门列表:
标题单位
它第一销售第一
它Unit2 销售Unit2 资产数据库:标题
部门*单元*
Asset1 IT Unit1
Asset2 IT Unit2
大卫查看SPCascadeDropdowns的文档,您可以指定一个回调函数,该函数在父列更改时执行。这似乎正是你所需要的连接你所要求的钩子。
你没有发布代码示例,所以我只能编一些东西。他们的演示页面使用地区,州和城市,所以让我们来玩一下。
如果我想根据"Region"的选择值为"City"添加一个过滤器,我可以这样使用:
var sCamlQuery = "";
// Cascade definition for State dropdown
$().SPServices.SPCascadeDropdowns({
relationshipList: "States",
relationshipListParentColumn: "Region",
relationshipListChildColumn: "Title",
relationshipListSortColumn: "Title",
parentColumn: "Region",
childColumn: "State"
completefunc: function() {
sCamlQuery = "<Eq><FieldRef Name='Status'/><Value Type='Text'>" + $("select[title='Region'] option:selected").text() + "</Value></Eq>";
})
});
// Cascade definition for City dropdown
$().SPServices.SPCascadeDropdowns({
relationshipList: "Cities",
relationshipListParentColumn: "State",
relationshipListChildColumn: "Title",
parentColumn: "State",
childColumn: "City",
CAMLQuery: sCamlQuery
});
这是一个非常幼稚的jQuery选择器,用于查找SELECT元素(查看TITLE属性),但您应该了解其中的含义。为completefunc
定义的匿名函数应该在父列("Region")更改时运行,并更新全局变量sCamlQuery
的值。当"City"级联运行时,它将使用生成的CAML查询。
编辑:更新示例以更好地匹配OP场景。当最上面的级联("区域")运行时,它将触发"状态"级联中的completefunc
匿名方法。这将设置sCamlQuery
变量的值,并将在"City"级联运行时使用。
编辑#2:更新样例代码,使用更通用的jQuery选择器;它将检索所选OPTION
的文本值。如果您希望使用OPTION
值,您可以将其简化为:$("select[title='Region']").val()
David:
你真的应该在SPServices网站的讨论区开始问这个问题!
上面代码中显示的内容是不必要的。如果按照所示的顺序对SPCascadeDropdowns进行两次调用,则不需要
CAMLQuery: "<Eq><FieldRef Name='Unit'/><Value Type='Text'>Unit 1</Value></Eq>"
这就是级联的工作原理。第一次调用将把部门限制为在选择单元时所选单元中的部门。第二个调用将把资产限制为在选择Department时所选Department中的资产。
如果你没有得到你期望的结果,那么你的关系列表可能没有你需要的值。
m .
根据列表内容的附加信息编辑:
这绝对是数据问题。您正在合并Department列表和Assets列表中的关系。你应该有这些列表:
- 部门—
- 单位—每个单位在列表中正好出现一次,带a列作为对Title中的查找表示单位的部门部门。
- Assets—每个资产这个列表正好有一次,有一列在单位中查找Title
这使你的列表真正的关系,然后调用SPCascadeDropdowns将做你想要的,就像在文档中的例子中国家/地区/州/城市。