2012-06-11 85 views
1

我有一個jsp鏈接到標記中的jquery腳本文件。在這個頁面中,我有一個標籤,當鏈接被點擊時,它必須從另一個jsp文件中加載。新頁面也有一定的jquery操作。但是當我加載頁面的jQuery操作不執行,因此我也加載jsp文件在新的jsp文件中。然後再次出現問題,即操作不止一次。請給出您寶貴的答覆,建議和解決方案的問題...如何防止多次加載jquery文件?

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Flyers</title> 

<link href="css/style.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="js/lib.js"></script> 
<script type="text/javascript" src="js/scripts.js"></script> 
<script type="text/javascript" src="js/jquery.json-2.3.min.js"></script> 
</head> 


    <div class="page_steps"> 
      <s:form method="post" action="flyers" name='ldm_form' id='ldm_form_flyers'> 


       <!-- Question 1 --> 
       <div class="questionstep"> 
        <div class="stepno">STEP 1</div> 
        <h2>Enter the correct DEC:</h2> 
        <input type="text" id="dec" name="oci.dec" value="" class="inputbx numericonly" maxlength="16" /> 

        <div class="errbox">Please enter valid DEC</div> 
        <input type="button" value="" class="btn_continue" /> 
       </div> 

       <!-- Question 2--> 
       <div class="questionstep"> 
        <div class="stepno">STEP 2</div> 
        <h2>Select Your target program</h2> 
        <div class="errbox">Please select at lease one</div> 
        <s:iterator value="targetPrograms"> 
        <input type="radio" name="tpId" value="<s:property value="tpId"/>"/><label id="<s:property value="tpId"/>"><s:property value="tpName"/></label><br/> 
        </s:iterator> 
        <input type="button" value="" class="btn_continue" /> 
       </div> 


       <!-- Question 3 --> 
       <div class="questionstep"> 
        <div class="stepno">STEP 3</div> 
        <h2>Select Your Mailing Materials</h2> 
        <div class="errbox">Please select at lease one</div> 

        <strong>Self Mailer</strong><br /> 
        <div class="mailmaterials"> 
         <ul class="questslider"> 
          <s:iterator value="mailingmaterials" id="mailMat" begin="0" end="1"> 
           <li> 
           <div class="quickpreview"><p>QUICK PREVIEW</p><div class="noshow"> 
            <s:iterator value="#mailMat.templatePath" id="tempPath" begin="0" end="1"> 
             <s:property value="#tempPath.ldmImgPath"/><s:property value="#tempPath.ldmImgName"/>, 
            </s:iterator> 
            </div></div> 
           <s:iterator value="#mailMat.templatePath" id="tempPath" begin="2"> 
           <img src="<s:property value="#tempPath.ldmImgPath"/><s:property value="#tempPath.ldmImgName"/>" width="90" height="149" alt="" /> 
           </s:iterator> 
           <br /> 
           <label> 
           <input type="radio" name="mailMatId" value="<s:property value="#mailMat.mailMatId"/>"/><s:property value="#mailMat.mailMatName"/></label> 
           </li> 
          </s:iterator> 

         </ul> 
        </div> 

這一個是我的主要的jsp頁面,在這裏我只顯示標題部分和標記,必須動態地變化頁面非常大,無法上傳,我認爲這麼多就足夠了,

,並在第二jsp頁面中我有

<s:set name="tabNo" value="tabNo"/> 
       <s:if test="%{#tabNo==0}"> 
        <s:form method="post" action="flyers" name='ldm_form' id='ldm_form_flyers'> 
         <!-- Question 1 --> 
         <div class="questionstep"> 
          <div class="stepno">STEP 1</div> 
          <h2>Enter the correct DEC:</h2> 
          <input type="text" id="dec" name="oci.dec" value="" class="inputbx numericonly" maxlength="16" /> 

          <div class="errbox">Please enter valid DEC</div> 
          <input type="button" value="" class="btn_continue" /> 
         </div> 
         <!-- Question 2--> 
         <div class="questionstep"> 
          <div class="stepno">STEP 2</div> 
          <h2>Select Your target program</h2> 
          <div class="errbox">Please select at lease one</div> 
          <s:iterator value="ordCaptAct.targetPrograms"> 
          <input type="radio" name="tpId" value="<s:property value="tpId"/>"/><label id="<s:property value="tpId"/>"><s:property value="tpName"/></label><br/> 
          </s:iterator> 
          <input type="button" value="" class="btn_continue" /> 
         </div> 
         <!-- Question 3 --> 
         <div class="questionstep"> 
          <div class="stepno">STEP 3</div> 
          <h2>Select Your Mailing Materials</h2> 
          <div class="errbox">Please select at lease one</div> 

          <strong>Self Mailer</strong><br /> 
          <div class="mailmaterials"> 
           <ul class="questslider"> 
            <s:iterator value="ordCaptAct.mailingmaterials" id="mailMat" begin="0" end="1"> 
             <li> 
             <div class="quickpreview"><p>QUICK PREVIEW</p><div class="noshow"> 
              <s:iterator value="#mailMat.templatePath" id="tempPath" begin="0" end="1"> 
               <s:property value="#tempPath.ldmImgPath"/><s:property value="#tempPath.ldmImgName"/>, 
              </s:iterator> 
              </div></div> 
             <s:iterator value="#mailMat.templatePath" id="tempPath" begin="2"> 
             <img src="<s:property value="#tempPath.ldmImgPath"/><s:property value="#tempPath.ldmImgName"/>" width="90" height="149" alt="" /> 
             </s:iterator> 
             <br /> 
             <label> 
             <input type="radio" name="mailMatId" value="<s:property value="#mailMat.mailMatId"/>"/><s:property value="#mailMat.mailMatName"/></label> 
             </li> 
            </s:iterator> 

           </ul> 
          </div> 

而在jQuery的文件,我有這樣的

代碼

直到這裏一切工作正常.....第二頁動態加載一切工作。但是,當它加載的,「btn_continue」必須調用一些jQuery函數像下面

$('#ldm_form_flyers .btn_continue').click(function(){ 
    var getid = $('.btn_continue').index($(this)); 
    switch(getid){ 
     case 0: 
      var getval = $.trim($("input[name='oci.dec']").val()); 
      if(getval=='' || getval.length!=16 || getval.match(/[^\d]/)){ 
       $("input[name='oci.dec']").addClass('err'); 
       $('.questionstep:eq('+getid+') .errbox').slideDown(); 
      } 
      else{ 
       $.getJSON("btn_continueAction?btn_continueId="+getid+"&oci.dec="+getval, function(data){ 
        var isNext=data.savedInSession; 
       $('.stepsanswer').eq(getid).find('span').html(getval); 
       $("input[name='oci.dec']").removeClass('err'); 
       $('.decanswer').html(getval); 
       if(isNext==true) 
        nextquestion(getid); 
       else 
        $('.questionstep:eq('+getid+') .errbox').slideDown(); 
       }); 
      } 
      break; 

現在正在加載這一功能後無法正常工作。因此,我試圖加載第二頁中的jquery文件,然後它的工作正常,但它不止一次地啓動了服務器,因爲該文件被加載了兩次,然後是4次,然後是8次,並最終增加了我的應用程序的速度。下。所以是否有阻止加載的文件,或任何解決方案,爲什麼「btn_continue」不工作,沒有加載第二個jsp中的jquery文件... ?????

+0

你有兩個jsp頁面,腳本標籤包含在每個頁面中? – Adil

+0

我認爲在這裏可以看到敘述中描述的確切代碼。 –

+0

您是否嘗試過使用modernizr?這是一個非常有用的js庫,用於這種工作http://modernizr.com/ – TheodoreV

回答

2

由於您要在DOM中動態添加元素,因此您應該使用.delegate()方法訪問它們。

而不是

$('#ldm_form_flyers .btn_continue').click(function(){ 

使用此

$('#ldm_form_flyers .btn_continue').delegate("click", function() { 

在jQuery 1.7,你應該使用的.on()代替.delegate()

的基本優勢的live()delegate()on()方法是你可以用它們做一個事件:hoverclick,等等,直到您以後添加元素通過AJAX,JavaScript的的createElement方法等尚不存在的元素

注意live已被棄用,取而代之delegate應該用於其他版本的jQuery比1.7.x.閱讀更多here

,當你基本上填充原始頁面中的遠程內容時,刪除第二個jsp中額外添加的javascript。

編輯:::

它,因爲你還沒有改變的方式。對作品。你只是不能從「活」變爲「開」。該API是.on()

$(document).on('click', '#ldm_form_flyers .btn_continue', function(){ 
    //your code 
}); 

不同它的工作原理是這樣::

$(document).on(events, selector, data, handler); 

你總是應該在使用前諮詢不同的API here的相關文件。

+0

感謝您的解決方案。 live()對我來說工作正常,但on()對我來說工作不正常。我搜索了一下,發現了一個解決方案。我試過像$('#ldm_form_flyers')。on(「click」,'。btn_continue',function(){但仍然不起作用 – Pranjut

+0

您正在使用哪個Jquery版本?它支持1.7+ –

+0

我是使用jquery-1.7.1.min.js – Pranjut