使用jquery在组合框中添加值

时间:2012-01-06 15:39:34

标签: javascript jquery jsp

是jquery的新手。 我有一个jsp表单,我在onload中调用javascript函数。 我想在使用jquery-1.4.2.js的iframe中的组合框中加载一些值但是无法添加。

请任何人给出解决方案 提前谢谢

听到的是我的jsp代码

      <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="javascript:getStateCountryDetail(<%=companyId%>,1,<%=countryId%>, <%=stateId%>)">
        <table border="0" cellpadding="0" cellspacing="0" width="100%" >
           <td width="100%" align="left" style="padding:3px" valign="top">
                        <table border="0" width="100%" bordercolor="#cce7fa" cellpadding="0" cellspacing="0" style="border-collapse:collapse">
                            <tr>
                                <td width="100%" align="left" valign="top">
                                    <iframe id = "applyMultipleInnerFrame" src ="/jsp/careers/applyMultipleCandidateResumeData.jsp?companyid=<%=companyId%>" name="applyMultipleInnerFrame" width="1100px" height="197px" frameborder="0" scrolling="Yes"></iframe>
                                </td>
                            </tr>
</table>
</td>
</tr>
</table>
</form>
</body>

听到我的iframe jsp

我包含下拉列表

<body>
<form name="applyMultipleCandidateResumeData"  method="POST" target="_top" action="http://<%=sName%>/jsp/careers/jobListingMainPage.jsp" enctype="multipart/form-data">
<table align="left"  width="100%" border=1 bordercolor="#ff9900" cellspacing=0 cellpadding="0" style="border-collapse:collapse">
                <td nowrap width="10%" align="left" style="border-color:#ff9900;color: black; font: 11px verdana;padding:2px" >
                    <input type="text" maxlength="64" size="9" value="" name="candidateCity_<%= i %>" id="candidateCity_<%= i %>" />
                </td>
                <td nowrap width="10%" align="left" style="border-color:#ff9900;color: black; font: 11px verdana;padding:2px" >
                        <select id = "candidateCountry_<%= i %>" name="candidateCountry_<%= i %>" class="controlStyle" onChange="loadState(this.value,'<%=i%>');">
                           <option value="0">-------- Select --------</option>
                    </select>
                </td>
                <td nowrap width="10%" align="left" style="border-color:#ff9900;color: black; font: 11px verdana;padding:2px" >
                <select id="candidateState_<%= i %>" name="candidateState_<%= i %>" class="controlStyle">
                    <option value="0">----------- Select ---------</option>
                </select>
                </td>
</table>
</form>
</body>

我使用以下代码使用jquery获取iframe对象,但我不知道它是否正确

var frm = $("#applyMultipleInnerFrame").contents());  

这是我的jquery代码

xmlDoc是我的jsone回复,其中包含国家/地区列表

var frm = $("#applyMultipleInnerFrame").contents());  
for(var i=0;i<5;i++) {
     if ($(frm).find('input[name=candidateCountry_' + i + ']') && $(frm).find('input[name=candidateCountry_' + i + '] option')) {
        $(frm).find('input[name=candidateCountry_' + i + '] option').length = 0;
        if (xmlDoc.countryList) {
            $(frm).find('input[name=candidateCountry_' + i + '] option')[$(frm).find('input[name=candidateCountry_' + i + '] option').length] = new Option("-- Select --", 0);
            for (var k = 0; k < xmlDoc.countryList.length; k++) {
                $(frm).find('input[name=candidateCountry_' + i + '] option')[$(frm).find('input[name=candidateCountry_' + i + '] option').length] = new Option(xmlDoc.countryList[k].name, xmlDoc.countryList[k].id);

                if ((xmlDoc.countryList[k].id) == dCountryId) {
                    alert($($(frm).find('input[name=candidateCountry_' + i + ']').text()));
                    //alert($(frm).find('input[name=candidateCountry_'+i+']').val(dCountryId).text());
                    //$(frm).find('input[name=candidateCountry_"+i+"] option').eq(dCountryId).attr('selected', 'selected'); 
                }
            }
        }
        //alert($(frm).find('input[name=candidateCountry_'+i+']) option:selected').text());
        //processAjaxRequestPost('ajaxRequestPost','SingleListHandler','getStateListDetails', eval('frm.candidateCountry_'+i).options[eval('frm.candidateCountry_'+i).selectedIndex].value);
    }
}

2 个答案:

答案 0 :(得分:0)

据我所知,你不能(轻松)修改iframe的内容,因为它们有自己的DOM。如果iframe中的内容来自您,(例如,page1.html包含一个包含page2.html的iframe),而不是外部来源,您可以将脚本插入page2.html,这样您就不必进行交叉-DOM技巧(我去过那里 - 很糟糕)。

P.S。你的代码看起来像是吞下了核武器。如果你清理了代码并发布了相关的部分,我相信你会得到更多的帮助;)

答案 1 :(得分:0)

要访问iframe的内容,您必须使用.contents()

  

.contents()方法也可用于获取内容文档   iframe,如果iframe与主页位于同一个域中。


现在关于你的代码,它真的很乱 在编写jquery代码时,请记住以下几点:

  • 查询效率不高,尽可能多地缓存查询(例如对于固定元素)

    var $frm = $(frm); // then use $frm
    
  • 创建标记,最有效的方法是将html构建为文本并立即附加整个块。

  • jQuery('') (or $(''))始终返回一个对象。要检查您的查询返回结果,请查看length属性

以下是一段优化代码:

// cache the elements you're going to use    
var $frm = $(frm),
    $candidCountry = $(frm).find('input[name=candidateCountry_' + i + ']');

// always check the length property to verify your query returned results
// because $('') always returns
if ($candidCountry.length && $candidCountry.find('option').length) {

    var html;

    if (xmlDoc.countryList) {

        // build the html as text
        html += '<option value="0">-- Select --</option>';

        for (var k = 0; k < xmlDoc.countryList.length; k++) {
            html += '<option value="'+xmlDoc.countryList[k].id+'">'+xmlDoc.countryList[k].name+'</option>';
        }
    }

    // append the whole html at once
    $candidCountry.html(html);
}