2012-01-06 2 views
0

Является новым для jquery. У меня есть одна форма jsp, в которой я вызываю функцию javascript в onload. Я хочу загрузить некоторые значения в combobox, который находится в iframe, используя jquery-1.4.2.js, но я не могу добавить.с использованием jquery добавить значения в combobox

пожалуйста, любой дают решения заранее спасибо

услышать мой 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> 

я используйте следующий код, чтобы получить объект iframe с помощью jqu чень, но я не знаю, правильно или нет ли

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); 
    } 
} 
+0

Вы должны действительно кэш '$ (FRM)' вместо того, чтобы называть его снова и снова : 'var $ frm = $ (frm);' и затем использовать '$ frm' – ThiefMaster

ответ

0

Насколько я знаю, вы можете 't (легко) изменить содержимое iframes, так как у них есть свой DOM. Если контент в iframe исходит от вас (скажем, page1.html содержит iframe, содержащий page2.html), а не внешний источник, вы можете подключить скрипт к странице2.html, чтобы вам не нужно было переходить -DOM трюки (я был там - это отстой).

P.S. Ваш код выглядит так, будто он проглотил ядерное оружие. Если вы очистили код и разместили только соответствующие части, я уверен, что вы получите дополнительную помощь в этом направлении;)

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); 
} 
+0

спасибо за ваш ответ .... я изменил свой стиль кода на свой стиль кода, но не получил результат. скажите, пожалуйста, как я могу получить объект iframe с помощью jquery – Mouli

+0

Я думаю, вы должны использовать 'var $ candidCountry = $ (" # applyMultipleInnerFrame "). contents(). find ('input [имя = кандидатCountry_' + i + ']') ' –

+0

frame id = applyMultipleInnerFrame и iframe jsp form id = applyMultipleCandidateResumeData Я пытаюсь получить объект формы var frm = $ ('# applyMultipleInnerFrame'). Contents(). Find ('# applyMultipleCandidateResumeData'); – Mouli

Смежные вопросы