2012-01-11 161 views
6

我有一個函數在其下面被調用來重新載入一個recaptcha圖像。它起作用,重新加載圖像,但在此之後不會做任何事情。基本上這個形狀是小的,它有這個rec​​aptcha它,所以我已經縮小它,並允許點擊放大和所有。如果該人員按下「獲取另一個驗證碼」調用reloadCAP(),它會檢查它是否具有較大圖像的類。如果是這樣,我需要它添加該類和CSS回新的圖像加載後的元素,但我似乎無法讓它的工作。有任何想法嗎?執行代碼AFTER Recaptcha.reload()完成後

function reloadCAP() { 
    if($("#recaptcha_widget img").hasClass('largecap')) { 
     Recaptcha.reload(); 
     $("#recaptcha_widget img").addClass('largecap'); 
     $('#recaptcha_image').css('height', '62px'); 
    } else { 
     Recaptcha.reload(); 
    } 
} 

這裏的HTML此:

<div id="recaptcha_widget" class="formRow" style="display:none;"> 
    <span class="f_label">Enter Words Below:</span> 
    <input type="text" class="setWidth" id="recaptcha_response_field" name="recaptcha_response_field" /> 

    <div class="cantread"> 
     <strong>Can't read this?</strong><br /> 
     <a href="javascript:reloadCAP()">Get another CAPTCHA</a> 
    </div> 

    <div id="recaptcha_image"></div> <!-- image loaded into this div --> 
     <div class="clear"></div> 
     <span class="smalltext">(click to enlarge)</span> 

     <br clear="all" /> 
    </div> 
<script type="text/javascript" src="http://api.recaptcha.net/challenge?k=6LfzMMwSAAAAADV6D04jDE6fKwrJ57dXwOEW-vY3&lang=en"></script> 

回答

3
$("#recaptcha_widget img").one('load',function(){ 
    $("#recaptcha_widget img").addClass('largecap'); 
    $('#recaptcha_image').css('height', '62px'); 
}); 

這會在您重新加載的圖像的加載事件中放置一次只監聽器,然後執行下面的代碼。

我用.one()代替​​這裏,因爲你不希望每次都附加了新的聽衆打電話reloadCAP()

編輯

好了,這裏就是我相信這個問題是。當您撥打Recaptcha.reload()時,它將刪除<img />並將其替換爲新的。所以當我們試圖附加事件時,它會在圖像被移除時被刪除。

你需要做的是地方類largecaprecaptcha_image股利和修改你的CSS樣式看起來像

.largecap img { 
    height: whatever; 
    width: whatever; 
} 
+0

嗯......試過.one然後.load並且都沒有得到它爲了我。我把它放在Recaptcha.reload()之前和之後;也沒有任何工作 – 2012-01-11 17:06:45

+0

如果調試器中沒有錯誤,可能只是您的一個選擇器無法正常工作。你可以添加一些HTML到你的quesion? – 2012-01-11 17:18:59

+0

添加了html剛纔 – 2012-01-11 17:27:16

0

不是一個理想的解決方案,但你可以把addClass以上代碼Recaptcha.reload()和只是一兩秒鐘延遲它。

希望有所幫助。

+0

我試過了幾個不同的變化,似乎沒有爲我工作:/但感謝您的幫助 – 2012-01-11 17:04:19

0

這聽起來像你真正需要的是定製的主題化,這樣你可以樣式驗證碼/ image/etc完全按照需要:https://developers.google.com/recaptcha/docs/customization

如果您確實想要堅持您當前的實現,您可以在調用Recaptcha.create()之前掛接到Recaptcha的內置(和未記錄的)回調函數中。

//Called after Recaptcha.reload() is finished loading 
Recaptcha._alias_finish_reload = Recaptcha.finish_reload; 
Recaptcha.finish_reload = function (challenge, b, c) { 
    //Call original function that creates the new img 
    Recaptcha._alias_finish_reload(challenge, b, c); 

    $("#recaptcha_widget img").toggleClass('largecap', true); 
} 

//Called when the initial challenge is received on page load 
Recaptcha._alias_challenge_callback = Recaptcha.challenge_callback; 
Recaptcha.challenge_callback= function() { 
    //Call original function that creates the new img 
    Recaptcha._alias_challenge_callback(); 

    $("#recaptcha_widget img").toggleClass('largecap', true); 
} 

你甚至遇到這個問題的原因是因爲破壞的Recaptcha並創建重新加載一個新的IMG每次,讓您手動添加的造型都將丟失。