আমি কীভাবে একক পৃষ্ঠায় একাধিক পুনঃপঠনগুলি প্রদর্শন করব?


103

আমার একক পৃষ্ঠায় 2 টি ফর্ম রয়েছে। ফর্মগুলির মধ্যে একটিতে রিস্যাপচা থাকে যা সর্বদা প্রদর্শিত হয়। অন্যটিকে লগইন প্রচেষ্টা সর্বাধিক করে তোলার মতো নির্দিষ্ট ইভেন্টের পরে কেবল একটি পুনঃপঠন প্রদর্শন করা উচিত। তাই এমন সময় আছে যখন একই পৃষ্ঠায় আমার উপস্থিত হওয়ার জন্য 2 টি পুনর্নির্মাণের প্রয়োজন হবে। এটা কি সম্ভব? আমি জানি আমি সম্ভবত দুজনের জন্য একটি একক ব্যবহার করতে পারি, তবে যেভাবে আমার বিন্যাসটি আছে, আমি 2 পছন্দ করতে পছন্দ করব Thanks ধন্যবাদ

আপডেট: ভাল আমি অনুমান করি এটি সম্ভব নাও হতে পারে। কেউ কি পুনরায় ক্যাপচা পাশাপাশি পাশাপাশি অন্য ক্যাপচার লাইব্রেরি সুপারিশ করতে পারেন? আমি একই পৃষ্ঠায় 2 টি ক্যাপচা রাখতে সক্ষম হতে চাই।

আপডেট 2: প্রতিটি ফর্ম একটি আইফ্রেমে রাখলে কী হবে? এটি কি গ্রহণযোগ্য সমাধান হবে?


আপনি কি একই বার দু'বার প্রদর্শন করতে পারবেন না?
টাইলার কার্টার

4
আমি চেষ্টা করেছিলাম ... যখন আমি ক্যাপচা কোডটি নকল করার চেষ্টা করব এটি কেবল ক্যাপচাটি প্রদর্শিত হবে যা প্রথমে আসে
ওম

যে কেউ নতুন reCAPTCHA API- এর জন্য এই জুড়ে আসছে, এই স্পষ্ট লোড এ ডক্সে উদাহরণ বর্ণনা ব্যবহার করে সম্ভব developers.google.com/recaptcha/docs/display#recaptcha_methods
এল Yobo

4
জাভাস্ক্রিপ্ট ব্যবহারের তুলনায় Hüseyin Yağlıজবাবের তুলনায় আইফ্রেমে সম্ভব হওয়া উচিত তবে সমস্যা সমাধানের একটি খারাপ উপায় । বেশিরভাগ ব্রাউজারের জাভাস্ক্রিপ্ট সমর্থন করা উচিত এবং ডিফল্ট রেসিপ্যাচএইচএ যেভাবে জাভাস্ক্রিপ্ট ব্যবহার করে। যদিও জাভাস্ক্রিপ্ট সমর্থন ছাড়াই সমস্যা সমাধানের জন্য কী করা দরকার তা আমি জানি না।
এডওয়ার্ড

উত্তর:


14

একটি এএসপি পৃষ্ঠায় এটি করার বিষয়ে অনুরূপ প্রশ্ন জিজ্ঞাসা করা হয়েছিল ( লিঙ্ক ) এবং সেখানে conকমত্য ছিল যে রিপ্যাচচা করা সম্ভব ছিল না। মনে হচ্ছে একক পৃষ্ঠায় একাধিক ফর্মগুলি অবশ্যই ক্যাপচা ভাগ করে নেবে, যদি না আপনি আলাদা ক্যাপচা ব্যবহার করতে চান। আপনি যদি রিপ্যাচচায় লক না হয়ে থাকেন তবে একবার দেখার জন্য একটি ভাল লাইব্রেরি হ'ল জেন্ড ফ্রেমওয়ার্কস জেন্ড_ক্যাপচা উপাদান ( লিঙ্ক )। এটি কয়েক আছে


9
এটা সম্ভব reCAPTCHA টি নিয়ে আসলে , শুধু সম্ভব নয় জাভাস্ক্রিপ্ট ছাড়া করতে । বেশিরভাগ ব্রাউজারের জাভাস্ক্রিপ্ট সমর্থন করা উচিত এবং ডিফল্ট রেক্যাপ্টچا যাইহোক জাভা স্ক্রিপ্ট ব্যবহার করে তাই এই সমাধানটি ভাল। Hüseyin Yağlıএর উত্তর সমাধান ব্যাখ্যা করে। এই সমাধানের জন্য reCAPTCHA ডকুমেন্টেশনটি বিকাশকারীদের মধ্যে রয়েছে: //recaptcha/docs/display#exp Clear_render । যদিও জাভাস্ক্রিপ্ট সমর্থন ছাড়াই সমস্যা সমাধানের জন্য কী করা দরকার তা আমি জানি না।
এডওয়ার্ড

বাস্তবে এটি রেক্যাপচা দিয়ে একেবারেই সম্ভব
কার্লোস এস্পিনোজা

212

রিক্যাপচা ( রেক্যাপ্টা এপিআই সংস্করণ ২.০ ) এর বর্তমান সংস্করণ সহ , আপনার এক পৃষ্ঠায় একাধিক পুনঃসঞ্চলন থাকতে পারে।

রিক্যাপচা ক্লোন করার দরকার নেই বা সমস্যাটি সমাধান করার চেষ্টা করার দরকার নেই। আপনাকে কেবল পুনঃনির্ধারণের জন্য একাধিক ডিভ উপাদান রাখতে হবে এবং তাদের অভ্যন্তরে স্পষ্টভাবে পুনঃনির্ধারণ করতে হবে।

গুগল রিক্যাপ্টা এপিআই দিয়ে এটি সহজ:
https://developers.google.com/recaptcha/docs/display#explicit_render

এখানে এইচটিএমএল কোডের উদাহরণ রয়েছে:

<form>
    <h1>Form 1</h1>
    <div><input type="text" name="field1" placeholder="field1"></div>
    <div><input type="text" name="field2" placeholder="field2"></div>
    <div id="RecaptchaField1"></div>
    <div><input type="submit"></div>
</form>

<form>
    <h1>Form 2</h1>
    <div><input type="text" name="field3" placeholder="field3"></div>
    <div><input type="text" name="field4" placeholder="field4"></div>
    <div id="RecaptchaField2"></div>
    <div><input type="submit"></div>
</form>

আপনার জাভাস্ক্রিপ্ট কোডে, আপনাকে পুনরায় পাঠানোর জন্য কলব্যাক ফাংশনটি সংজ্ঞায়িত করতে হবে:

<script type="text/javascript">
    var CaptchaCallback = function() {
        grecaptcha.render('RecaptchaField1', {'sitekey' : '6Lc_your_site_key'});
        grecaptcha.render('RecaptchaField2', {'sitekey' : '6Lc_your_site_key'});
    };
</script>

এর পরে, আপনার পুনর্নির্মাণ স্ক্রিপ্ট url এর মতো দেখতে হবে:

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>

অথবা আপনার পুনঃপঠন ক্ষেত্রগুলিতে আইডি দেওয়ার পরিবর্তে, আপনি একটি শ্রেণীর নাম দিতে পারেন এবং আপনার শ্রেণি নির্বাচক এবং কল রেন্ডার () এর সাথে এই উপাদানগুলিকে লুপ করতে পারেন)


4
কাকতালীয়ভাবে, আপনি কি জানেন যে কীভাবে প্রতিটি ক্ষেত্রের জন্য jquery বৈধতার জন্য লুকানো রেক্যাপচা ক্ষেত্র যুক্ত করবেন ?, বর্তমানে আমি এটি কেবল 1 রিক্যাপচিল্ডের সাথে কাজ করছি তবে এটি দুটি রিপ্যাচচায় কাজ করতে পারে? <ইনপুট টাইপ = "লুকানো" শ্রেণি = "গোপনে পুনর্নির্মাণের প্রয়োজন" নাম = "গোপনে রিচ্যাপচা" আইডি = "লুকানো পুনর্নির্মাণ">
ইভান জুয়ারেজ

4
@ ইভানজুয়ারেজ এটি একটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করা একটি ভাল প্রশ্ন।
হেসেইন ইয়ালি

4
আপনারা যারা একাধিক উদাহরণ সহ গ্র্যাক্যাপচা.জেট রেসপোনস () ব্যবহার করতে চান তাদের জন্য আপনি প্রতিটি রেন্ডারকে 0,1,2 ইত্যাদি হিসাবে উল্লেখ করতে পারেন। উদাহরণস্বরূপ, প্রথম উদাহরণটি গ্র্যাক্যাপচা.জেটরেসপনস (0) হিসাবে উল্লেখ করা হবে।
জিন কেলি

4
আমার সময়টি এর নিখুঁত সমাধানটি সংরক্ষণ করুন
মির্জা ওবায়দ

4
কি দারুন! এটি কিছুটা কাজ করেছে, তবে @ জেনকেলির নোটটি যুক্ত করতে grecaptcha.getResponse(0)এবং grecaptcha.getResponse(1)একাধিক ঘটনা যাচাই করতে আমি যুক্ত করব যে সূচীকরণটি grecaptcha.renderআদেশের সাথে সামঞ্জস্য করতে হবে । এই উদাহরণস্বরূপ, এর grecaptcha.render('RecaptchaField1'...সাথে যাচাই করা হবে grecaptcha.getResponse(0)এবং ইত্যাদি দ্বারা grecaptcha.render('RecaptchaField2'...যাচাই করা হবে grecaptcha.getResponse(1)...
কোডাকোপিয়া

76

সহজ এবং সরল:

1) এটির সাথে আপনার পুনঃপঠন ক্ষেত্রগুলি সাধারণত তৈরি করুন:

<div class="g-recaptcha" data-sitekey="YOUR_KEY_HERE"></div>

2) স্ক্রিপ্টটি এটি দিয়ে লোড করুন:

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>

3) এখন ক্ষেত্রগুলির মধ্যে পুনরাবৃত্তি করতে এবং পুনঃপঠনগুলি তৈরি করতে এটি কল করুন:

<script type="text/javascript">
  var CaptchaCallback = function() {
    jQuery('.g-recaptcha').each(function(index, el) {
        grecaptcha.render(el, {
            'sitekey' : jQuery(el).attr('data-sitekey')
            ,'theme' : jQuery(el).attr('data-theme')
            ,'size' : jQuery(el).attr('data-size')
            ,'tabindex' : jQuery(el).attr('data-tabindex')
            ,'callback' : jQuery(el).attr('data-callback')
            ,'expired-callback' : jQuery(el).attr('data-expired-callback')
            ,'error-callback' : jQuery(el).attr('data-error-callback')
        });
    });
  };
</script>

4
এটিই সঠিক উপায় আইএমও, এটি এটিকে গতিশীল করে তোলে যে স্থির আইডিকে সংজ্ঞায়িত না করেই আমি সীমাহীন উদাহরণ পেতে পারি
গ্রেগ আলেকজান্ডার

4
আপনার যদি ম্যানুয়ালি ক্যাপচা কোডটি বের করার দরকার হয় (যেমন অ্যাজাক্স অনুরোধগুলি) তবে আমার উত্তরটি দেখুন
ভ্যানডির

আপনি কি আমার প্রশ্নটি একবার দেখে নিতে পারেন ? পোষ্ট প্যারামিটার খালি যাচ্ছে।
মারসিও মাজ্জাচাতো

4
data-sitekey="YOUR_KEY_HERE"অকেজো এবং
ডিভ

4
আসলে আপনার একটা টাইপ আছে। অ্যাট্রিবিউট ডেটা-সাইটকি প্রয়োজনীয় এবং এটি যদি আপনার একাধিক সাইটকি থাকে তবে এটিকে আরও গতিশীল করে তোলে। সঠিক লাইনটি হবেgrecaptcha.render(el, {'sitekey' : $(el).attr('data-sitekey') });
Gkiokan

13

এটি jQuery এর clone()ফাংশন সহ সহজেই সম্পন্ন হয় ।

সুতরাং আপনাকে অবশ্যই পুনঃনির্ধারণের জন্য দুটি র‌্যাপার ডিভ তৈরি করতে হবে। আমার প্রথম ফর্মের পুনঃপঞ্চা দ্বি:

<div id="myrecap">
    <?php
        require_once('recaptchalib.php');
        $publickey = "XXXXXXXXXXX-XXXXXXXXXXX";
        echo recaptcha_get_html($publickey);
    ?>
</div>

দ্বিতীয় ফর্মের ডিভ খালি (বিভিন্ন আইডি)। সুতরাং আমার ঠিক:

<div id="myraterecap"></div>

তারপরে জাভাস্ক্রিপ্টটি বেশ সহজ:

$(document).ready(function() {
    // Duplicate our reCapcha 
    $('#myraterecap').html($('#myrecap').clone(true,true));
});

সম্ভবত কোনও trueমান সহ দ্বিতীয় প্যারামিটারের প্রয়োজন হবে না clone(), তবে এটির ক্ষতি করতে হবে না ... এই পদ্ধতির একমাত্র সমস্যাটি যদি আপনি এজ্যাক্সের মাধ্যমে আপনার ফর্মটি জমা দিচ্ছেন তবে সমস্যাটি হ'ল আপনার দুটি উপাদান রয়েছে একই নাম এবং আপনার সঠিক উপাদানটির মানগুলি যেভাবে #recaptcha_response_fieldধরছেন সে সম্পর্কে আমাকে আরও চতুর করে তুলতে হবে ( কারওর প্রয়োজনে কেবল পুনরায় ক্যাপচা উপাদানগুলির জন্য দুটি আইডি এবং #recaptcha_challenge_field)


আপনি যখন নতুন চ্যালেঞ্জের জন্য অনুরোধ করবেন তখন আপনি সমস্যার মুখোমুখি হবেন কারণ এটি কেবলমাত্র একটি
পুনর্নির্মাণের

এটি কার্যকর হয় না ... এর অর্থ কেবল আসল ক্যাপচা (এখানে প্রথমে <div id = "myrecap"> বলা হয়) কেবল রিফ্রেশ হবে এবং অন্যটি সতেজ হবে না
অক্সি

প্রকৃতপক্ষে অক্সি, আপনার উদ্বেগটি আমার পূর্ববর্তী মন্তব্যে সম্বোধন করা হয়েছিল
সেরজ সাগান

4
আপনি সম্ভবত এটি ভুল করছেন ... কিভাবে আপনার কোডের লিঙ্ক সম্পর্কে jsfiddle.net যাহাই হউক না কেন, এর আর কোনও কিছু করার দরকার নেই ... আপনার হেসেইন ইয়ালা উত্তরটি ব্যবহার করা উচিত।
সার্জ সাগান

7

আমি জানি এই প্রশ্নটি পুরানো তবে ভবিষ্যতে যদি কেউ এটি সন্ধান করে তবে। এক পৃষ্ঠায় দুটি ক্যাপচা থাকা সম্ভব। ডকুমেন্টেশনের জন্য গোলাপী এখানে: https://developers.google.com/recaptcha/docs/display নীচের উদাহরণটি কেবল একটি অনুলিপি ফর্ম ডক এবং আপনাকে বিভিন্ন লেআউট নির্দিষ্ট করতে হবে না।

<script type="text/javascript">
  var verifyCallback = function(response) {
    alert(response);
  };
  var widgetId1;
  var widgetId2;
  var onloadCallback = function() {
    // Renders the HTML element with id 'example1' as a reCAPTCHA widget.
    // The id of the reCAPTCHA widget is assigned to 'widgetId1'.
    widgetId1 = grecaptcha.render('example1', {
      'sitekey' : 'your_site_key',
      'theme' : 'light'
    });
    widgetId2 = grecaptcha.render(document.getElementById('example2'), {
      'sitekey' : 'your_site_key'
    });
    grecaptcha.render('example3', {
      'sitekey' : 'your_site_key',
      'callback' : verifyCallback,
      'theme' : 'dark'
    });
  };
</script>

6

এই উত্তরটি @rapadko এর উত্তরের একটি বর্ধন ।

যদি আপনাকে ম্যানুয়ালি ক্যাপচা কোডটি বের করতে হয় (যেমন এজ্যাক্স অনুরোধগুলির মধ্যে) আপনাকে কল করতে হবে:

grecaptcha.getResponse(widget_id)

তবে আপনি কীভাবে উইজেট আইডি পরামিতিটি পুনরুদ্ধার করতে পারেন?

আমি প্রতিটি জি-রিপ্যাচচা বাক্সের উইজেট আইডি (একটি এইচটিএমএল ডেটা অ্যাট্রিবিউট হিসাবে) সঞ্চয় করতে ক্যাপচাক্যালব্যাকের এই সংজ্ঞাটি ব্যবহার করি :

var CaptchaCallback = function() {
    jQuery('.g-recaptcha').each(function(index, el) {
        var widgetId = grecaptcha.render(el, {'sitekey' : 'your code'});
        jQuery(this).attr('data-widget-id', widgetId);
    });
};

তারপরে আমি কল করতে পারি:

grecaptcha.getResponse(jQuery('#your_recaptcha_box_id').attr('data-widget-id'));

কোডটি বের করতে।


4
আরে, তার জন্য ধন্যবাদ কি #your_recaptcha_box_id?
লুকাস বুস্তামন্তে

4

আমার ফুটারে যোগাযোগের ফর্ম রয়েছে যা সর্বদা প্রদর্শিত হয় এবং কিছু অ্যাকাউন্ট যেমন তৈরি করুন অ্যাকাউন্টেরও ক্যাপচা থাকতে পারে, তাই এটি গতিশীল এবং আমি jQuery এর সাথে পরবর্তী উপায়ে ব্যবহার করছি:

এইচটিএমএল:

<div class="g-recaptcha" id="g-recaptcha"></div>

<div class="g-recaptcha" id="g-recaptcha-footer"></div>

জাভাস্ক্রিপ্ট

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit&hl=en"></script>
<script type="text/javascript">
  var CaptchaCallback = function(){        
      $('.g-recaptcha').each(function(){
        grecaptcha.render(this,{'sitekey' : 'your_site_key'});
      })
  };
</script>

4

এটি রাফাডকো এবং বিশেষ্য দ্বারা সরবরাহিত উত্তরটির একটি জিকুয়েরি মুক্ত সংস্করণ ।

1) এটির সাথে আপনার পুনঃপঠন ক্ষেত্রগুলি সাধারণত তৈরি করুন:

<div class="g-recaptcha"></div>

2) স্ক্রিপ্টটি এটি দিয়ে লোড করুন:

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>

3) এখন ক্ষেত্রগুলির মধ্যে পুনরাবৃত্তি করতে এবং পুনঃপঠনগুলি তৈরি করতে এটি কল করুন:

var CaptchaCallback = function() {
    var captchas = document.getElementsByClassName("g-recaptcha");
    for(var i = 0; i < captchas.length; i++) {
        grecaptcha.render(captchas[i], {'sitekey' : 'YOUR_KEY_HERE'});
    }
};

2

পৃষ্ঠার উত্স কোডটি দেখে আমি পুনরায় ক্যাপচা অংশ নিয়েছি এবং কোডটি কিছুটা পরিবর্তন করেছি। কোডটি এখানে:

এইচটিএমএল:

<div class="tabs">
    <ul class="product-tabs">
        <li id="product_tabs_new" class="active"><a href="#">Detailed Description</a></li>
        <li id="product_tabs_what"><a href="#">Request Information</a></li>
        <li id="product_tabs_wha"><a href="#">Make Offer</a></li>
    </ul>
</div>

<div class="tab_content">
    <li class="wide">
        <div id="product_tabs_new_contents">
            <?php $_description = $this->getProduct()->getDescription(); ?>
            <?php if ($_description): ?>
                <div class="std">
                    <h2><?php echo $this->__('Details') ?></h2>
                    <?php echo $this->helper('catalog/output')->productAttribute($this->getProduct(), $_description, 'description') ?>
                </div>
            <?php endif; ?>
        </div>
    </li>

    <li class="wide">
        <label for="recaptcha">Captcha</label>
        <div id="more_info_recaptcha_box" class="input-box more_info_recaptcha_box"></div>
    </li>

    <li class="wide">
        <label for="recaptcha">Captcha</label>
        <div id="make_offer_recaptcha_box" class="input-box make_offer_recaptcha_box"></div>
    </li>
</div>

jQuery:

<script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>
<script type="text/javascript">
    jQuery(document).ready(function() {
        var recapExist = false;
      // Create our reCaptcha as needed
        jQuery('#product_tabs_what').click(function() {
            if(recapExist == false) {
                Recaptcha.create("<?php echo $publickey; ?>", "more_info_recaptcha_box");
                recapExist = "make_offer_recaptcha_box";
            } else if(recapExist == 'more_info_recaptcha_box') {
                Recaptcha.destroy(); // Don't really need this, but it's the proper way
                Recaptcha.create("<?php echo $publickey; ?>", "more_info_recaptcha_box");
                recapExist = "make_offer_recaptcha_box";
            }
        });
        jQuery('#product_tabs_wha').click(function() {
            if(recapExist == false) {
                Recaptcha.create("<?php echo $publickey; ?>", "make_offer_recaptcha_box");
                recapExist = "more_info_recaptcha_box";
            } else if(recapExist == 'make_offer_recaptcha_box') {
                Recaptcha.destroy(); // Don't really need this, but it's the proper way (I think :)
                Recaptcha.create("<?php echo $publickey; ?>", "make_offer_recaptcha_box");
                recapExist = "more_info_recaptcha_box";
            }
        });
    });
</script>

আমি এখানে সাধারণ জাভাস্ক্রিপ্ট ট্যাব কার্যকারিতা ব্যবহার করছি। সুতরাং, যে কোড অন্তর্ভুক্ত করা হয়নি।

ব্যবহারকারী এ "অনুরোধ তথ্য" এ ক্লিক করুন করবে যখন (#product_tabs_what), তাহলে জাতীয় চেক করবে recapExistহয় falseঅথবা কিছু মান আছে। যদি এর কোনও মান থাকে তবে Recaptcha.destroy();এটি পুরানো লোড হওয়া পুনরায় ক্যাপচা ধ্বংস করতে কল করবে এবং এই ট্যাবের জন্য এটি পুনরায় তৈরি করবে। অন্যথায় এটি কেবল একটি পুনরায় ক্যাপচা তৈরি করবে এবং ডিভের মধ্যে রাখবে #more_info_recaptcha_box। "মেক অফার" #product_tabs_whaট্যাব হিসাবে একই ।


2

var ReCaptchaCallback = function() {
    	 $('.g-recaptcha').each(function(){
    		var el = $(this);
    		grecaptcha.render(el.get(0), {'sitekey' : el.data("sitekey")});
    	 });  
        };
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.google.com/recaptcha/api.js?onload=ReCaptchaCallback&render=explicit" async defer></script>


ReCaptcha 1
<div class="g-recaptcha" data-sitekey="6Lc8WQcUAAAAABQKSITdXbc6p9HISCQhZIJwm2Zw"></div>

ReCaptcha 2
<div class="g-recaptcha" data-sitekey="6Lc8WQcUAAAAABQKSITdXbc6p9HISCQhZIJwm2Zw"></div>

ReCaptcha 3
<div class="g-recaptcha" data-sitekey="6Lc8WQcUAAAAABQKSITdXbc6p9HISCQhZIJwm2Zw"></div>


2 ফর্ম অংশ কোথায়?
MeSo2

দুঃখিত আপনি না পেয়ে
surinder singh

আপনার <div class="g-recaptcha" data-sitekey="your_site_key"></div>যেখানে প্রয়োজন সেখানে কেবল ফর্ম / ডিভিডিতে রেখে দিন
সুরিন্দর সিংহ

2

grecaptcha.getResponse()পদ্ধতি গ্রহণ করে একটি ঐচ্ছিক যদি অনির্দিষ্ট নির্মিত প্রথম উইজেটে "WIDGET_ID" প্যারামিটার এবং অক্ষমতা। grecaptcha.render()প্রতিটি উইজেটের তৈরি পদ্ধতি থেকে একটি উইজেট_আইডি ফিরে আসে, এটি রিপ্যাচটিএইচএএনএইচটিএ এর ধারকের সাথে সম্পর্কিত নয় id!

প্রতিটি রেক্যাপচার নিজস্ব প্রতিক্রিয়া ডেটা থাকে। আপনাকে রেক্যাপচা ডিভিডি একটি আইডি দিতে হবে এবং getResponseপদ্ধতিতে এটি পাস করতে হবে :

যেমন

<div id="reCaptchaLogin"
     class="g-recaptcha required-entry"
     data-sitekey="<?php echo $this->helper('recaptcha')->getKey(); ?>"
     data-theme="<?php echo($this->helper('recaptcha')->getTheme()); ?>"
     style="transform:scale(0.82);-webkit-transform:scale(0.82);transform-origin:0 0;-webkit-transform-origin:0 0;">
</div>


<script type="text/javascript">
  var CaptchaCallback = function() {
    jQuery('.g-recaptcha').each(function(index, el) {
        grecaptcha.render(el, {
            'sitekey' : jQuery(el).attr('data-sitekey')
            ,'theme' : jQuery(el).attr('data-theme')
            ,'size' : jQuery(el).attr('data-size')
            ,'tabindex' : jQuery(el).attr('data-tabindex')
            ,'callback' : jQuery(el).attr('data-callback')
            ,'expired-callback' : jQuery(el).attr('data-expired-callback')
            ,'error-callback' : jQuery(el).attr('data-error-callback')
        });
    });
  };
</script>

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>

অ্যাক্সেস প্রতিক্রিয়া:

var reCaptchaResponse = grecaptcha.getResponse(0);

বা

var reCaptchaResponse = grecaptcha.getResponse(1);

1

উড়ে যাওয়ার প্রতিটি ফর্মের জন্য একটি রিপ্যাচচা ইনপুট তৈরি করা একটি ভাল বিকল্প (আমি এটি দুটি দিয়ে সম্পন্ন করেছি তবে আপনি সম্ভবত তিন বা ততোধিক ফর্ম করতে পারেন)। আমি রিজ্যাপচা এজেএক্স এপিআই সহ এজেএক্সের মাধ্যমে ফর্মটি পোস্ট করতে jQuery, jQuery বৈধতা এবং jQuery ফর্ম প্লাগইন ব্যবহার করছি -

https://developers.google.com/recaptcha/docs/display#recaptcha_methods

যখন ব্যবহারকারী একটি ফর্ম জমা দেয়:

  1. জমাটি বাধা দিন - আমি jQuery ফর্ম প্লাগইন এর পূর্বে সাবমিট সম্পত্তি ব্যবহার করেছি
  2. পৃষ্ঠায় বিদ্যমান যে কোনও রেক্যাপচা ইনপুটগুলি ধ্বংস করুন - আমি jQuery এর e .mpty () পদ্ধতি এবং Recaptcha.destroy () ব্যবহার করেছি
  3. নির্দিষ্ট ফর্মের জন্য একটি রিপ্যাচচা ক্ষেত্র তৈরি করতে Recaptcha.create () কল করুন
  4. মিথ্যা প্রত্যাবর্তন।

তারপরে, তারা পুনরায় পূরণ করতে এবং ফর্মটি পুনরায় জমা দিতে পারে। পরিবর্তে যদি তারা কোনও আলাদা ফর্ম জমা দেওয়ার সিদ্ধান্ত নেয় তবে ভাল, আপনার কোডটি বিদ্যমান রিক্যাপ্টাগুলির জন্য পরীক্ষা করে তোলে যাতে আপনার পৃষ্ঠায় একবারে কেবল একটি পুনর্নির্মাণ থাকবে।


1

করার জন্য একটি বিট যোগ করুন raphadko এর উত্তর : যেহেতু আপনি (এক পৃষ্ঠাতে) একাধিক ক্যাপচা আছে, তবে আপনি (সর্বজনীন) ব্যবহার করতে পারবেন না g-recaptcha-responseপোষ্ট প্যারামিটার (কারণ এটি শুধুমাত্র এক ক্যাপচা প্রতিক্রিয়া ঝুলিতে)। পরিবর্তে, grecaptcha.getResponse(opt_widget_id)প্রতিটি ক্যাপচার জন্য আপনার কল ব্যবহার করা উচিত । এখানে আমার কোড (প্রতিটি ক্যাপচা তার ফর্মের ভিতরে রয়েছে):

এইচটিএমএল:

<form ... />

<div id="RecaptchaField1"></div>

<div class="field">
  <input type="hidden" name="grecaptcha" id="grecaptcha" />
</div>

</form>

এবং

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>

জাভাস্ক্রিপ্ট:

var CaptchaCallback = function(){
    var widgetId;

    $('[id^=RecaptchaField]').each(function(index, el) {

         widgetId = grecaptcha.render(el.id, {'sitekey' : 'your_site_key'});

         $(el).closest("form").submit(function( event ) {

            this.grecaptcha.value = "{\"" + index + "\" => \"" + grecaptcha.getResponse(widgetId) + "\"}"

         });
    });
};

লক্ষ্য করুন যে আমি সমস্ত গতিশীল পরিবর্তিত উপাদানগুলিতে ইভেন্ট প্রতিনিধি ( অ্যাডেন্ড উপাদানগুলির পরে রিফ্রেশ ডিওএম দেখুন ) প্রয়োগ করি । এটি প্রতিটি ফর্ম submitইভেন্টে ক্যাপ্টারের প্রতিক্রিয়াটিকে আবদ্ধ করে ।


বাহ, আমি এর জন্য কয়েক ঘন্টা অনুসন্ধান করছিলাম। ধন্যবাদ !!
কালো 15

1

এখানে এমন একটি সমাধান দেওয়া হয়েছে যা অনেকগুলি দুর্দান্ত উত্তর তৈরি করে। এই বিকল্পটি jQuery মুক্ত, এবং গতিশীল, আপনাকে আইডি দ্বারা নির্দিষ্টভাবে উপাদানগুলিকে লক্ষ্য করার প্রয়োজন হয় না।

1) আপনার রেক্যাপচা মার্কআপটি সাধারণত যুক্ত করুন:

<div class="g-recaptcha" data-sitekey="YOUR_KEY_HERE"></div>

2) নথিতে নিম্নলিখিতগুলি যুক্ত করুন। এটি যে কোনও ব্রাউজারে কাজ করবে যা ক্যোয়ারী নির্বাচনকারী সমস্ত API সমর্থন করে

<script src="https://www.google.com/recaptcha/api.js?onload=renderRecaptchas&render=explicit" async defer></script>
<script>
    window.renderRecaptchas = function() {
        var recaptchas = document.querySelectorAll('.g-recaptcha');
        for (var i = 0; i < recaptchas.length; i++) {
            grecaptcha.render(recaptchas[i], {
                sitekey: recaptchas[i].getAttribute('data-sitekey')
            });
        }
    }
</script>

0

এটি সম্ভব, কেবল পুনরায় সংযুক্তি অ্যাজাক্স কলব্যাকগুলি ওভাররাইট করুন। ওয়ার্কিং জেএসফিডাল: http://jsfiddle.net/Vanit/Qu6kn/

এমনকি আপনার প্রক্সি ডিভেরও দরকার নেই কারণ ওভাররাইটের সাহায্যে ডম কোড কার্যকর হবে না। আপনি যখনই আবার কলব্যাকগুলি ট্রিগার করতে চান তখন রিক্যাপ্টা.রেলোড () কল করুন।

function doSomething(challenge){
    $(':input[name=recaptcha_challenge_field]').val(challenge);
    $('img.recaptcha').attr('src', '//www.google.com/recaptcha/api/image?c='+challenge);
}

//Called on Recaptcha.reload()
Recaptcha.finish_reload = function(challenge,b,c){
    doSomething(challenge);
}

//Called on page load
Recaptcha.challenge_callback = function(){
    doSomething(RecaptchaState.challenge)
}

Recaptcha.create("YOUR_PUBLIC_KEY");

0

ঠিক এটি করার জন্য এখানে একটি দুর্দান্ত গাইড:

http://mycodde.blogspot.com.ar/2014/12/m Multipleple-recaptcha-demo-same-page.html

মূলত আপনি এপিআই কলটিতে কিছু পরামিতি যুক্ত করেন এবং প্রতিটি পুনঃনির্ধারণ ম্যানুয়ালি রেন্ডার করুন:

<script src="https://www.google.com/recaptcha/api.js?onload=myCallBack&render=explicit" async defer></script>
<script>
        var recaptcha1;
        var recaptcha2;
        var myCallBack = function() {
            //Render the recaptcha1 on the element with ID "recaptcha1"
            recaptcha1 = grecaptcha.render('recaptcha1', {
                'sitekey' : '6Lc_0f4SAAAAAF9ZA', //Replace this with your Site key
                'theme' : 'light'
            });

            //Render the recaptcha2 on the element with ID "recaptcha2"
            recaptcha2 = grecaptcha.render('recaptcha2', {
                'sitekey' : '6Lc_0f4SAAAAAF9ZA', //Replace this with your Site key
                'theme' : 'dark'
            });
        };
</script>

PS: "grecaptcha.reender" পদ্ধতিটি একটি আইডি পায়


0

আমি অদৃশ্য রেক্যাপচা ব্যবহার করব। তারপরে আপনার বোতামে "ফর্মনাম = 'আপনার রূপের নাম'" এর মতো কোনও ট্যাগটি ব্যবহার করুন যা কোন ফর্মটি জমা দিতে হবে তা নির্দিষ্ট করতে এবং জমা ফর্ম ইনপুটটি আড়াল করে।

এর সুবিধাটি হ'ল এটি আপনাকে এইচটিএমএল 5 ফর্মের বৈধতা অক্ষুণ্ন রাখতে সক্ষম করে, একটি পুনর্নির্মাণ, তবে একাধিক বোতাম ইন্টারফেস। রিপ্যাচচা দ্বারা উত্পাদিত টোকন কীটির জন্য কেবল "ক্যাপচা" ইনপুট মানটি ক্যাপচার করুন।

<script src="https://www.google.com/recaptcha/api.js" async defer ></script>

<div class="g-recaptcha" data-sitekey="yours" data-callback="onSubmit" data-size="invisible"></div>
<script>
var formanme = ''
$('button').on('click', function () { formname = '#'+$(this).attr('formname');
    if ( $(formname)[0].checkValidity() == true) { grecaptcha.execute(); }
    else { $(formname).find('input[type="submit"]').click() }
    });

var onSubmit = function(token) {
    $(formname).append("<input type='hidden' name='captcha' value='"+token+"' />");
    $(formname).find('input[type="submit"]').click()
    };
</script>

আমি এই এফএআর সহজ এবং পরিচালনা করা সহজ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.