我使用http://spservices.codeplex.com创建了一个级联下拉表单,但是想在第三个级联下拉列表中添加一个过滤器。所以SPServices有一个名为CAMLQuery的函数,我可以在其中添加这个过滤器,但我希望使用表单顶部下拉列表中的值来指定过滤器。
页面上给出的一个例子是:
CAMLQuery: "<Eq><FieldRef Name='Status'/><Value Type='Text'>Active</Value></Eq>"
我希望此状态列从表单上字段选择的选项中获取其值。这有可能,我该怎么写呢?
编辑:我正在尝试使用级联选项创建资产列表,以便在选择单位和部门后找到正确的资产。 尝试以下答案后的代码示例,并且未在“资产”选择器中显示任何内容。有两个列表,一个包含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>
部门列表:
标题 单位
IT Unit1
销售单位1
IT Unit2
销售单位2
资产数据库:
标题 部门 *单位*
Asset1 IT Unit1
Asset2 IT Unit2
大卫
答案 0 :(得分:0)
查看SPCascadeDropdowns的文档,您可以指定在父列更改时执行的回调函数。这似乎是您需要连接所需要的钩子。
你没有发布任何代码示例,所以我只需要做些什么。他们的演示页面使用了Region,State和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属性),但你应该明白这个想法。每当父列(“Region”)发生更改时,就会运行为completefunc
定义的匿名函数,并更新全局变量sCamlQuery
的值。当“City”级联运行时,它将使用生成的CAML查询。
编辑:更新了示例以更好地匹配OP场景。当最顶层的级联运行(“区域”)时,它将触发“状态”级联中的completefunc
匿名方法。这将设置sCamlQuery
变量的值,并在“City”级联运行时使用。
编辑#2:更新了示例代码以使用更通用的jQuery选择器;它将检索所选OPTION
的文本值。如果您想要OPTION
值,则可以将其简化为:$("select[title='Region']").val()
答案 1 :(得分:0)
大卫:
你真的应该在SPServices site in the Discussions开始问这个!
您在上面的代码中显示的内容不是必需的。如果您按照显示的顺序对SPCascadeDropdowns进行两次调用,那么您不需要
CAMLQuery: "<Eq><FieldRef Name='Unit'/><Value Type='Text'>Unit 1</Value></Eq>"
这就是级联的工作方式。第一次调用将部门限制为选择单位时所选单位的部门。第二次调用会将资产限制为选择部门时所选部门的资产。
如果您没有得到预期的结果,那么您的关系列表可能没有您需要的值。
微米。
根据列表内容的其他信息进行编辑:
这绝对是一个数据问题。您正在组合部门列表和资产列表中的关系。你应该有这些清单:
这使您的列表真正成为关系,然后对SPCascadeDropdowns的调用将按照您所需的方式执行,就像国家/地区/州/城市的文档中的示例一样。