JavaScript - 过滤下拉菜单

凯文米德尔顿

我确信这很明显,但我根本无法弄清楚。

我有两个下拉列表,第二个下拉列表的内容根据第一个下拉列表中的选择进行过滤。目前的过滤器始终基于两个下拉匹配中“选项值”的第一个字母。下面是一个例子:

HTML

<table>
<tr>
<td align="right">Department</td>
<td>                        
<select name="ANSWER.TTQ.MENSYS.7" id="ANSWER.TTQ.MENSYS.7." data-ttqseqn="51" class="forminfree">
<option value=""></option>
<option value="DE">Department DE</option>
<option value="HS">Department HS</option>
<option value="BS">Department BS</option>
</select>
</td>
</tr>           

<tr>
<td align="right">Sub-Department</td>
<td>                        
<select name="ANSWER.TTQ.MENSYS.8" id="ANSWER.TTQ.MENSYS.8." data-ttqseqn="52" class="forminfree">
<option value=""></option>
<option value="BSCCC01">Sub-Department 1</option>
<option value="BSCCC02">Sub-Department 2</option>
<option value="BSCCC03">Sub-Department 3</option>
<option value="HSCCC04">Sub-Department 1</option>
<option value="HSCCC05">Sub-Department 2</option>
<option value="HSCCC06">Sub-Department 3</option>
<option value="DECCC07">Sub-Department 1</option>
<option value="DECCC08">Sub-Department 2</option>
<option value="DECCC09">Sub-Department 3</option>
</select>
</td>
</tr>
</table>

JavaScript

var $options = "";

function Init_Page() {

// Ensure the sub-department dropdown is filtered every time the department changes
$('select[data-ttqseqn="51"]').bind('change', function() {
Set_Dpt_List(this.value);
});

// Keep a copy of the full sub-department list from Page Load in $options
var dpt_sel = $('select[data-ttqseqn="52"]').attr('id');
dpt_sel = '#' + escape_selector(dpt_sel);
$options = $(dpt_sel + ' option').clone();

//If a department is already selected then filter the sub-department dropdown accordingly
var fac_sel = $('select[data-ttqseqn="51"]').attr('id');
var facc = get_value(fac_sel);
if (facc) {
Set_Dpt_List(facc)
};
}

function Set_Dpt_List(facc) {

if (facc) {
// If a department is selcted then only show sub-departments whose code begins with the same 1st character
facc = facc.substr(0, 1);
var opts = $options.clone().filter(function() {
return (this.value.substr(0, 1) == facc || this.value == "");
});
$('select[data-ttqseqn="52"]').html(opts);
} else {
$('select[data-ttqseqn="52"]').html($options.clone());
}
}

请注意,该示例将不起作用,因为它引用了代码中不存在的函数。

客户正在更改其编码结构,以便子部门代码的首字母不再与任何部门代码的首字母匹配。计划是将当前的“选项值”代码放在标签的开头,如下例所示:

<table>
<tr>
<td align="right">Department</td>
<td>
<select name="ANSWER.TTQ.MENSYS.7" id="ANSWER.TTQ.MENSYS.7." data-ttqseqn="51" class="forminfree">
<option value=""></option>
<option value="DE">Department DE</option>
<option value="HS">Department HS</option>
<option value="BS">Department BS</option>
</select>
</td>
</tr>
<tr>
<td align="right">Sub-Department</td>
<td>
<select name="ANSWER.TTQ.MENSYS.8" id="ANSWER.TTQ.MENSYS.8." data-ttqseqn="52" class="forminfree">
<option value=""></option>
<option value="CCC01">BS - Sub-Department 1</option>
<option value="CCC02">BS - Sub-Department 2</option>
<option value="CCC03">BS - Sub-Department 3</option>
<option value="CCC04">HS - Sub-Department 1</option>
<option value="CCC05">HS - Sub-Department 2</option>
<option value="CCC06">HS - Sub-Department 3</option>
<option value="CCC07">DE - Sub-Department 1</option>
<option value="CCC08">DE - Sub-Department 2</option>
<option value="CCC09">DE - Sub-Department 3</option>
</select>
</td>
</tr>
</table>

但是,我无法弄清楚如何从中提取要在过滤器中使用的第一个字母。有人可以帮忙吗?

请注意,“选择”ID、名称等都是系统驱动的,无法更改。此外,每个下拉列表中的所有选项都是数据库驱动的,不能更改。

谢谢。

安吉特·乔杜里

虽然过滤正在Set_Dpt_List()使用innerHTML而不是value作为部门代码出现在选项的显示值中。

您的过滤器功能应该是:

var opts = $options.clone().filter(function() {
return (this.innerHTML.substr(0, 1) == facc || this.value == ""); //innerHTML instead of value
});

完整代码(经过一些修改以使其正常工作):

var $options = "";

function Init_Page() {

// Ensure the sub-department dropdown is filtered every time the department changes
$('select[data-ttqseqn="51"]').bind('change', function() {
Set_Dpt_List(this.value);
});

// Keep a copy of the full sub-department list from Page Load in $options
var dpt_sel = $('select[data-ttqseqn="52"]').attr('id');
dpt_sel = '#' + dpt_sel;
$options = $(dpt_sel + ' option').clone();

//If a department is already selected then filter the sub-department dropdown accordingly
var fac_sel = $('select[data-ttqseqn="51"]').attr('id');
var facc = $('select[data-ttqseqn="51"]').val();
if (facc) {
Set_Dpt_List(facc)
};
}

function Set_Dpt_List(facc) {

if (facc) {
// If a department is selcted then only show sub-departments whose code begins with the same 1st character
facc = facc.substr(0, 1);
var opts = $options.clone().filter(function() {
return (this.innerHTML.substr(0, 1) == facc || this.value == "");
});
$('select[data-ttqseqn="52"]').html(opts);
} else {
$('select[data-ttqseqn="52"]').html($options.clone());
}
}
Init_Page();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td align="right">Department</td>
<td>
<select name="ANSWER.TTQ.MENSYS.7" id="ANSWERTTQMENSYS7" data-ttqseqn="51" class="forminfree">
<option value=""></option>
<option value="DE">Department DE</option>
<option value="HS">Department HS</option>
<option value="BS">Department BS</option>
</select>
</td>
</tr>
<tr>
<td align="right">Sub-Department</td>
<td>
<select name="ANSWER.TTQ.MENSYS.8" id="ANSWERTTQMENSYS8" data-ttqseqn="52" class="forminfree">
<option value=""></option>
<option value="CCC01">BS - Sub-Department 1</option>
<option value="CCC02">BS - Sub-Department 2</option>
<option value="CCC03">BS - Sub-Department 3</option>
<option value="CCC04">HS - Sub-Department 1</option>
<option value="CCC05">HS - Sub-Department 2</option>
<option value="CCC06">HS - Sub-Department 3</option>
<option value="CCC07">DE - Sub-Department 1</option>
<option value="CCC08">DE - Sub-Department 2</option>
<option value="CCC09">DE - Sub-Department 3</option>
</select>
</td>
</tr>
</table>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用JavaScript过滤下拉菜单

来自分类Dev

JavaScript下拉菜单

来自分类Dev

下拉菜单javascript功能

来自分类Dev

Javascript多级下拉菜单

来自分类Dev

Javascript下拉菜单添加

来自分类Dev

JavaScript的级联下拉菜单

来自分类Dev

单击jQuery或JavaScript菜单下拉菜单

来自分类Dev

使用JavaScript按HTML表中的下拉菜单值进行过滤

来自分类Dev

使用JavaScript的简单下拉菜单

来自分类Dev

javascript:动态下拉菜单值

来自分类Dev

Javascript下拉菜单可更改HTML

来自分类Dev

使用JavaScript创建下拉菜单

来自分类Dev

Javascript 100%宽度下拉菜单

来自分类Dev

使用JavaScript从数组填充下拉菜单

来自分类Dev

Javascript广告与下拉菜单冲突

来自分类Dev

下拉菜单和javascript表单更改

来自分类Dev

Javascript无法验证我的下拉菜单

来自分类Dev

通过下拉菜单激活Javascript命令

来自分类Dev

使用javascript创建下拉菜单

来自分类Dev

使用javascript更新下拉菜单

来自分类Dev

使用JavaScript的简单下拉菜单

来自分类Dev

使用JavaScript触发下拉菜单

来自分类Dev

javascript中的PHP用于下拉菜单

来自分类Dev

在悬停下拉菜单中,JavaScript

来自分类Dev

下拉菜单隐藏图片onchange javascript

来自分类Dev

使用JavaScript隐藏CSS下拉菜单

来自分类Dev

javascript中折扣计算的下拉菜单

来自分类Dev

颜色更改下拉菜单javascript

来自分类Dev

CSS/Javascript 下拉菜单问题