2012-01-08 96 views
0

这是我在选择下拉值编程

http://www.bkstr.com/CategoryDisplay/10001-9604-10311-1?demoKey=d 

这些工作的URL被下拉值:

选择你的计划:所有(恒定)

选择您的期限:2012年春季(常数))

按课程编号查找或选择您的部门:包含值列表(我需要从我的程序中逐一选择此值)

根据我们在上一个下拉列表中选择的内容,将显示下一个下拉菜单中的“按课程ID搜索或选择课程”。

这是我试图自动化的部分。

那么,在点击提交我得到的URL

http://www.bkstr.com/webapp/wcs/stores/servlet/CourseMaterialsResultsView?catalogId=10001&categoryId=9604&storeId=10311&langId=-1&programId=755&termId=100021416&divisionDisplayName=%20&departmentDisplayName=ADV&courseDisplayName=3001&sectionDisplayName=10182&demoKey=d&purpose=browsea 

在这里我可以看到所选的值越来越作为查询参数传递,但随后这给我留下了一个问题:

  • 每次有新值添加到下拉列表中,我必须更改我的代码以合并该值

如何以编程方式(动态)循环粗糙的部门&它的后续课程没有硬编码我的查询参数之前的值?任何指导?

回答

0

您需要将数据库中的列表课程以与部门索引对应的JS数组的形式“回显”到页面中。注意数组从0开始计数,所以你的部门值也应该从0开始。这段代码应该在你html的头部。

var courses = [ 
    ["course1-1","course1-2","course1-3","course1-4","course1-5"], 
    ["course2-1","course2-2","course2-3","course2-4","course2-5"], 
    ["course3-1","course3-2","course3-3","course3-4","course3-5"] 
]; 

然后,用javascript,为您的<select>添加事件侦听器。说你有这个HTML

<select id="departments"> 
    <option value="0">dept1</option> 
    <option value="1">dept2</option> 
    <option value="2">dept3</option> 
</select> 

<select id="courses"></select> 

对于jQuery,你的监听器会是这样的。它应该得到以前的选择值并在此基础上构建另一个选择。

$(document).ready(function(){ 


function setCourses() { 
    var departmentValue = $('#departments').val(); 
    var courseOptions = ""; 
    for (i = 0; i < courses.length; i++) { 
     courseOptions += "<option value=" + i + ">" +courses[departmentValue][i] + "</option>"; 
    } 
    $("#courses").html(courseOptions); 
} 

$('#departments').change(function() { 
    setCourses(); 
}); 

setCourses(); 

}); 

这里有一个小提琴:http://jsfiddle.net/z5GTX/1/

1

使用Selenium RC,假设你有一个GUI访问服务器(它不需要是相同的服务器作为一个执行PHP)。有一个PHP版本,您可以使用它打开浏览器并模拟点击和其他与页面的交互。

http://seleniumhq.org/projects/remote-control/

如果您没有访问带有GUI的服务器,你需要做服务器端JavaScript的东西,如犀牛或的NodeJS。