最近,我想开发一个简单的表格过滤web应用程序,因为我发现大学课程选择页面无功能并且很难浏览符合特定标准的一些课程。因此,我写了一些代码所需的功能:)在jQuery上奇怪的过滤失败
我是新来的JavaScript和这个过滤网页是我第一个包含JavaScript代码的小项目。当然,我在1.8.3版本的过程中使用了JQuery。
我的页面布局如下:
4的过滤器与功能
- 课程代码 - 选择时,使用AJAX,从原始源表低于过滤器的提取到div(只是一个巨大的元素)。
- 课程日 - 选中时,不包含该日的行将被隐藏。
- 课程时长 - 就像2.
- 主要限制 - 这里是有问题的过滤器。首先让我们看看表结构。
这个屏幕截图是从原始源。现在您已经看到主要限制栏是如何填充的,让我们来谈谈过滤器。
这里是我的网页截图:
第3个选择很好地工作。这是js代码给你一个想法。以下是日期过滤器。
$('#gunler').change(function() {
if ($(this).val() != "Seçiniz/Select") { //if an option for gunler (days) is selected
$(".dersprg tr").show(); //show all rows first
applyFilter(); //apply previously selected filters (hours, major restriction)
$(".dersprg tr td:nth-child(6):missing('" + $(this).val() + "')").parent().hide(); //hide row that dont
$(".dersprg td:contains('CRN')").parent().show(); //show the header of the table //contain selected
} //option
else { //if the option is "defaulted"
$(".dersprg td").parent().show(); //show all rows
applyFilter(); //apply previously selected filters
$(".dersprg td:contains('CRN')").parent().show(); //show header of the table
}
});
那么,主要限制过滤器有相同的结构,但它产生一些奇怪的输出。例如,当从下拉列表中选择BLGE时,过滤器工作正常。但是,当选择MAT时,即使只有一门课程只为MAT学生开放,过滤器也会隐藏该行。一些BLG课程也是如此。有3-4个课程,主要限制为“BLG”,当我从下拉列表中选择BLG时,其他课程包含其他专业的BLG,但是有些行只有BLG作为主要限制。我加倍检查了一切,我似乎错过了故障点。
奇怪的部分是当我从jsfiddle,工作相同的代码,它工作得很好! 这是的jsfiddle代码
$.expr[':'].missing = function (elem, index, match) {
return (elem.textContent || elem.innerText || Sizzle.getText([elem]) || "").indexOf(match[3]) == -1;
}
$(".dersprg tr").show();
$(".dersprg tr td:nth-child(12):missing('MAT')").parent().hide();
$(".dersprg td:contains('CRN')").parent().show();
的HTML代码的原始来源我之前展示你的结果是单行是正确的过滤!
然而,在本地主机上或者网页所期望的代码将不会工作。我使用Google Chrome版本24.0.1312.56米。我也从Mozilla Firefox浏览过滤器,但结果是一样的。
你能告诉我哪里出了问题,我该如何纠正它? 感谢您的时间&注意:)
一些额外的信息我认为这将是有益的:
我使用了一种叫做applyFilter()会的功能,这里是它的身体:
function applyFilter() {
if ($('#saatler').val() != "Seçiniz/Select") {
$(".dersprg tr:missing('" + $('#saatler').val() + "')").hide();
}
if ($('#bolumler').val() != "Seçiniz/Select") {
$(".dersprg tr:missing('" + $('#bolumler').val() + "')").hide();
}
if ($('#gunler').val() != "Seçiniz/Select") {
$(".dersprg tr:missing('" + $('#gunler').val() + "')").hide();
}
}
这里是如何的主要限制过滤器创建的选项:
<option selected value="Seçiniz/Select">Seçiniz/Select</option>
<?php
$bolumler = str_getcsv(file_get_contents('bolumler.csv'));
foreach ($bolumler as $bolum)
echo '<option value="' . $bolum . '">' . $bolum . '</option>';
?>
</select>
和 “bolumler.csv”
BIO,BIOE,BLG,BLGE,CEV,CEVE,CHZ,CHZE,DEN,沙地,DUIK,EHB, EHBE,ELE,ELH,ELK,ELKE的内容,ENDE,EUT,EUTE,FIZ,FIZE,GEM,GEME, ISLE,JDF,JEF,JEFE ,MEE,JEO,KIM,KIME,KMM,KMME,KON,KONE,MAD, PEME,PET,PETE ,SBP,SBPE,TEK,TEKE,TEL,THO,UCK,UCKE,UZB,UZBE
如果您想执行过滤器上的一些操作,下面是链接到我的网页:
http://ilbeyli.fast-page.org/ITUDersProg/
感谢所有的人再次尝试工作的事情了。
你可以发布一个链接到您的jsfiddle? – pete
谢谢编辑,皮特:) [这里](http://jsfiddle.net/WbppU/1/)是jsfiddle链接。正如你所看到的过滤器完美工作。我认为这个问题可能与csv文件有关,但这也没有意义。我失去了请帮助我:) – Varaquilex