2011-06-11 31 views
0

我試着在Google上進行研究,並在這裏瀏覽了一些問題。我嘗試了一些解決方案,但我無法讓他們工作。使用jQuery問題進行驗證碼刷新

<td> 
    <img id="captcha" src="captcha.php" name="captcha" /> 
    <img src="refresh.jpg" width="25" alt="" id="refresh_captcha" name="refresh_captcha" /> 
    <input type="text" name="txtCaptcha" id="txtCaptcha" size="10" /> 
</td> 

下面的代碼不起作用:

$('.refresh_captcha').click(function(){ 
    $('img').attr('src', 'captcha.php?cache=' + new Date().getTime()); 
}); 

我也試過這樣:

$("#refresh_captcha").click(function() { 
    $("#captcha").attr("src","captcha.php?r=" + Math.random()); 
}); 

而這也:

jQuery(function($) { 
    jQuery('#captcha').after("<a href=\"#\" id=\"refresh_captcha\">Refresh<\/a>"); 
    jQuery('body').delegate('#refresh_captcha','click',function(){ 
     jQuery.ajax({ 
      'success':function(html){ 
       jQuery("#captcha").attr("src",html) 
      }, 
      'url':'/captcha.php?refresh=1', 
      'cache':false 
     }); 
     return false; 
    }); 
}); 

任何人都可以幫助我?

+0

有什麼問題?什麼是「不工作」? – corroded 2011-06-11 06:09:06

+0

工作不意味着驗證碼不會刷新 – user236501 2011-06-11 06:10:33

+0

'$(「 refresh_captcha」)'將無法工作,因爲沒有與類名'refresh_captcha'但第二個應該夠沒有元素。你看到'r'的值每次點擊都隨機化了嗎? – tradyblix 2011-06-11 06:16:00

回答

0

您是否嘗試清空緩存? (編輯:是的,你確實......)問題是否出現在所有瀏覽器中?我認爲你的瀏覽器會緩存舊圖像,因爲你的直接調用似乎有效。嘗試cache: false代替'cache' = false

對我來說,這個解決方案使用AJAX的呼叫和Java春天在後臺工作:

function generateCaptcha() { 

    $.ajaxSetup({ 
     cache: false 
    }); 

    var timestamp = (new Date()).getTime(); 

    requestMappingCaptcha = "/generateCaptcha"; 

    jQuery.get(requestMappingCaptcha, timestamp, function(data) { 
       $("#captchaImg").slideUp("fast"); 

       if (!$.browser.msie || ($.browser.msie && $.browser.version == "9.0")) { 
         // animate reloadArrows 
         $("#reloadArrows").rotate({ 
         angle:0, 
         animateTo:360 
        }); 
       } 

       // setting new source 
       var newSrc = $("#captchaImg").attr("src").split("?"); 
       newSrc = newSrc[0] + "?" + timestamp; 
       $("#captchaImg").attr("src", newSrc); 
       $("#captchaImg").slideDown("fast"); 
     }); 
} 

和HTML爲:

     <div class="container captcha"> 
          <spring:url value="/captcha.jpeg" var="url"/> 
          <div class="step2_captcha"> 
           <img id="captchaImg" src="${url}" alt="Generatin captcha..." width="180" height="42" border="0" name="captchaImg"/> 
          </div> 
          <span class="help captcha"> 
           <img src="/r.png" onclick="generateCaptcha();" id="reloadArrows" title="Reload Captcha"/> 
          </span> 
          &nbsp; 
         </div> 

是什麼嗎!通過點擊圖標,功能generateCaptcha將被調用。請求映射調用了一個服務器函數(在我的例子中是java),並將一個新的驗證碼呈現給舊版本的同一個URL。它的importent禁用緩存併發送get的時間戳。這樣做後,一個小小的jQuery魔術就完成了,驗證碼的來源將更改爲圖像 - Url +時間戳。

希望它會爲你工作PHP作爲良好。