2015-05-03 17 views
22

Tôi có một hình thức rất đơn giản như sau. Tôi muốn thực hiện để nút Gửi bị tắt và chỉ bật sau người dùng đã hoàn tất thành công ReCaptcha.ReCaptcha 2.0: kích hoạt nút Submit trên callback nếu recaptcha thành công

Tôi giả sử tôi sẽ cần một số Javascript/jQuery để thực hiện việc này.

Tài liệu của Google về ReCaptcha 2.0 có vẻ thực sự thưa thớt và dày đặc (với tôi, dù sao). Tôi muốn đánh giá cao một số gợi ý:

<form action="something.php" method="post"> 
    Name: <input type="text" size="40" name="name"><br><br> 
    <div class="g-recaptcha" data-sitekey="############-#####"></div> 
    <input type="submit" value="Submit" > 
</form> 
+0

Giả sử rằng hình ảnh xác thực là điều cuối cùng trước khi gửi nút, bạn sẽ chỉ giới thiệu sự chậm trễ cho khách truy cập của mình. Và nếu javascript bị vô hiệu hóa thì sao? – jeroen

+1

@jeroen Những người có javascript bị vô hiệu hóa là một trường hợp cạnh mà tôi sẵn sàng bỏ qua để tránh spam-bots. –

+1

Phương pháp có thực sự an toàn không? Không thể bot spam vẫn gửi biểu mẫu mà không có nút gửi dưới bất kỳ hình thức nào? –

Trả lời

60

tôi đã làm điều tương tự trên trang web thử nghiệm của mình. tuy nhiên, tôi đã sử dụng nút thay vì gửi, do đó, tại đây:

bạn phải thêm thuộc tính data-callback="enableBtn" thuộc tính gọi lại dữ liệu thực thi chức năng được chỉ định sau khi hoàn thành recaptcha.

<div class="g-recaptcha" data-sitekey="############-#####" data-callback="enableBtn"></div> 

và thiết lập id của nút để bất cứ điều gì id bạn muốn:

<input type="button" value="Submit" id="button1"> 

Ở Trang tải/form load của tắt nút

document.getElementById("button1").disabled = true; 

đó trở đi javascript thực hiện một để bật nút

function enableBtn(){ 
    document.getElementById("button1").disabled = false; 
    } 

hy vọng nó sẽ giúp.

+1

Chỉnh sửa nhỏ (loại bỏ các dấu ngoặc sau tên hàm): '

' – Caedmon

+1

@Caedmon Corrected .. cảm ơn đã đề cập. –

+3

@ panda.o24 Thực sự hữu ích và điều này làm việc cho tôi. Bit bối rối mặc dù. Captcha đã được xác minh đầy đủ khi gọi lại được gọi chưa? Nếu vậy mục đích của khóa bí mật mà bạn được cấp khi bạn đăng ký là gì? Tôi đã giả định rằng một nơi nào đó trong Javascript gọi lại một cuộc gọi Ajax để Google sẽ là cần thiết? Tôi đã sai rồi sao? – ifinlay

Các vấn đề liên quan