是jquery的新手。 我有一个jsp表单,我在onload中调用javascript函数。 我想在使用jquery-1.4.2.js的iframe中的组合框中加载一些值但是无法添加。
请任何人给出解决方案 提前谢谢
<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>
我包含下拉列表
<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());
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);
}
}
答案 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);
}