Jquery 重新绘制一秒钟<;选择>;

Jquery 重新绘制一秒钟<;选择>;,jquery,html,ajax,jquery-mobile,Jquery,Html,Ajax,Jquery Mobile,我在网页上显示了两个列表: (客户名单) (项目清单) 当用户更改其在客户机列表中的选择时,我将重新填充项目列表。我对php/mysql进行jquery调用,获取与该客户机相关的项目,然后使用这些数据设置客户机的选项。不幸的是,更改项目元素的列表内容不会导致此元素的显示更改,就像为文本元素设置innerHTML一样 我可以强制刷新页面,一切看起来都很好,但我宁愿不刷新页面。是否有办法使元素重新绘制 下面是一组有问题的HTML/javascript。在函数BuildProjectList()的底部

我在网页上显示了两个列表: (客户名单) (项目清单)

当用户更改其在客户机列表中的选择时,我将重新填充项目列表。我对php/mysql进行jquery调用,获取与该客户机相关的项目,然后使用这些数据设置客户机的选项。不幸的是,更改项目
元素的列表内容不会导致此元素的显示更改,就像为文本元素设置
innerHTML
一样

我可以强制刷新页面,一切看起来都很好,但我宁愿不刷新页面。是否有办法使
元素重新绘制

下面是一组有问题的HTML/javascript。在函数BuildProjectList()的底部可以看到,我尝试了两种方式填充项目列表,一种是设置innerHTML,另一种是构建选项列表。在任何一种情况下,当我响应客户机列表中选择的更改而更改项目列表的内容时,项目列表的显示都不会更新。但是,如果在此之后更改了项目列表中的选择,则显示会更新,并且您可以验证项目列表的基础数据实际上已更改

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Test List ....</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<script type="text/javascript">
function BuildClientList()
{
    var uiEl = document.getElementById('uidCl');
    var aUidClient = new Array(3);

    aUidClient[0] = ['101', 'Client 1'];
    aUidClient[1] = ['102', 'Client 2'];
    aUidClient[2] = ['102', 'Client 3'];

    uiEl.options.length = 0;
    var cClient = aUidClient.length;
    for (iRow = 0; iRow < cClient; iRow++)
    {
        uiEl.options[iRow] = new Option(aUidClient[iRow][1], aUidClient[iRow][0]);
    }
}

function BuildProjectList()
{
    iClient = document.getElementById('uidCl').selectedIndex;
    var uiEl = document.getElementById('uidPr');
    var aUidProject = new Array(3);
    switch (iClient)
    {
        case 0:
        aUidProject[0] = ['101', '1Project 1'];
        aUidProject[1] = ['102', '1Project 2'];
        aUidProject[2] = ['103', '1Project 3'];
        break;
        case 1:
        aUidProject[0] = ['201', '2Project 1'];
        aUidProject[1] = ['202', '2Project 2'];
        aUidProject[2] = ['203', '2Project 3'];
        break;
        default:
        aUidProject[0] = ['301', '3Project 1'];
        aUidProject[1] = ['302', '3Project 2'];
        aUidProject[2] = ['303', '3Project 3'];
    }


    uiEl.options.length = 0;
    var cProject = aUidProject.length;
    var strInner = "";
    for (iRow = 0; iRow < cProject; iRow++)
    {
        uiEl.options[iRow] = new Option(aUidProject[iRow][1], aUidProject[iRow][0]);
        strInner += "<option value=\"" + aUidProject[iRow][0] + "\">" + 
            aUidProject[iRow][1] + "</option>";
    }
//  uiEl.innerHTML = strInner;
}

</script>
</head>
<body>
<div data-role="fieldcontain">
<input type="hidden" id="id_user_info" name="id_user_info" value="1" />
   <label for="s_client" class="select ui-hidden-accessible">Client...</label>
   <select data-overlay-theme="a" data-native-menu="false" name="uidCl" id="uidCl" onChange="BuildProjectList()">
<script type="text/javascript">
BuildClientList();
</script>
</select>


</div><div data-role="fieldcontain">
<input type="hidden" id="id_proj" name="id_proj" value="2" />
   <label for="s_proj" class="select ui-hidden-accessible">Project...</label>
   <select data-overlay-theme="a" data-native-menu="false" name="uidPr" id="uidPr" >
<script type="text/javascript">
BuildProjectList();
</script>
</select>
</div>
</body>
</html>

测试列表。。。。
函数BuildClientList()
{
var uiEl=document.getElementById('uidCl');
var aUidClient=新数组(3);
aUidClient[0]=['101','Client 1'];
aUidClient[1]=['102','Client 2'];
aUidClient[2]=['102','Client 3'];
uiEl.options.length=0;
var cClient=aUidClient.length;
对于(iRow=0;iRow
我找到了一种使用jquery在列表中设置索引并刷新显示的方法。下面的javascript函数显示了如何:

// set the index for a <select> element
function SetIndex(eid, i)
{
    var strEid = "#" + eid;
    var menuSelect = $(strEid);
    menuSelect[0].selectedIndex = i;
    menuSelect.selectmenu("refresh");
}
//设置元素的索引
函数集合索引(eid,i)
{
var strEid=“#”+eid;
变量menuSelect=$(strEid);
menuSelect[0]。selectedIndex=i;
菜单选择。选择菜单(“刷新”);
}

它实际上应该。。。请发布您的代码并创建一个演示。请提供一些代码示例。您的问题“很遗憾,更改客户端元素的列表内容不会导致”部分不清楚。为什么要更改客户端列表元素?更改是指所选的索引?可以使用jQuery触发更改事件:也许这就是重新绘制项目列表所需的全部内容。我已经添加了一组HTML/javascript来显示问题。