问题描述
||
我已经使用http://spservices.codeplex.com制作了一个级联下拉列表,但想在第三个级联下拉列表中添加一个过滤器。因此,SPServices具有一个名为CAMLQuery的函数,可以在其中添加此过滤器,但我希望使用表单顶部下拉菜单中的值来指定该过滤器。
页面上给出的一个示例是:
CAMLQuery: \"<Eq><FieldRef Name=\'Status\'/><Value Type=\'Text\'>Active</Value></Eq>\"
我希望此“状态”列从表单上的字段中选择的选择中获取其值。这可能吗,我该怎么写?
编辑:我正在尝试通过级联选择制作资产清单,以在选择部门和部门后找到合适的资产。
尝试以下答案且在“资产”选择器中未显示任何内容之后的代码示例。有两个列表,一个包含单位和部门,一个包含资产以及要过滤的部门和单位键的列表。
如果我用静态查询替换\“ dynamic \”查询,例如:
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\",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\",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\",CAMLQuery: sCamlQuery
});
});
</script>
部门清单:
标题单位
IT部门1
销售单位1
IT部门2
销售部门2
资产数据库:
标题部门*单位*
资产1 IT部门1
Asset2 IT Unit2
大卫
解决方法
查看SPCascadeDropdowns的文档,您可以指定在父列更改时执行的回调函数。这似乎恰好是您需要连接的钩子。
您没有发布任何代码示例,所以我只需要弥补一下。他们的演示页面使用Region,State和City,因此让我们开始吧。
如果我想根据选定的\“ 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\",parentColumn: \"State\",childColumn: \"City\",CAMLQuery: sCamlQuery
});
这是一个非常幼稚的jQuery选择器,用于查找SELECT元素(查看TITLE属性),但是您应该明白这一点。每当更改父列(\“ Region \”)时,都应运行为completefunc
定义的匿名函数,并更新全局变量sCamlQuery
的值。当\“ City \”级联运行时,它将使用生成的CAML查询。
编辑:更新了示例以更好地匹配OP方案。当最上面的级联运行时(\“ Region \”),它将触发\“ State \”级联中的completefunc
匿名方法。这将设置“ 7”变量的值,并将在运行“ City”级联时使用。
编辑#2:更新了示例代码,以使用更具通用性的jQuery选择器;它将检索所选“ 10”的文本值。如果您想要OPTION
的值,则可以将其简化为:$(\"select[title=\'Region\']\").val()
,大卫:
您确实应该在“讨论”中的SPServices网站上问这个问题!
上面的代码中显示的内容不是必需的。如果按照显示的顺序对SPCascadeDropdowns进行了两次调用,则不需要
CAMLQuery: \"<Eq><FieldRef Name=\'Unit\'/><Value Type=\'Text\'>Unit 1</Value></Eq>\"
这就是级联的工作方式。在选择单位时,第一个呼叫将把部门限制为所选单位中的部门。在选择部门时,第二次调用将把资产限制为所选部门中的资产。
如果没有得到期望的结果,则您的RelationshipLists中可能没有所需的值。
M.
根据有关列表内容的其他信息进行编辑:
绝对是数据问题。您正在合并部门列表和资产列表中的关系。您应该具有以下列表:
部门-各个部门
仅列出一次。
单位-每个单位
在列表中只出现一次,并带有
列作为对标题的查找
部门指示该单位的
部门。
资产-每项资产
列表仅一次,带有一列
作为单位标题的查找
指示该资产的单位。
这使您的列表真正具有关系性,然后对SPCascadeDropdowns的调用将完成您想要的操作,就像“国家/地区/州/城市”文档中的示例一样。