仅在 JavaScript/jQuery 中触发提交按下 BUT 时才显示的 Recaptcha?
Recaptcha that only shows when submit pressed BUT is triggered in JavaScript/jQuery?
我有一个用于客户表单的 Recaptcha,他们只希望在单击提交按钮时显示 Recaptcha。
但提交按钮只有在所有输入字段都已填写时才可点击,他们希望在字段为空且单击按钮时显示工具提示。
如您所想,这意味着当有空字段时我无法禁用按钮,因为我需要一个 .click()
事件。但是,我无法将 recaptcha 绑定到按钮,因为它会自动触发所以我不得不做一个不可见的 recaptcha,其中 div
具有 data-sitekey
属性和 g-recaptcha
class.
所以我需要知道如何通过 JavaScript 触发 recaptcha 事件并使其具有与绑定到按钮相同的结果。
如果需要更多信息,请告诉我。
编辑:
var fieldsFilled = false;
if(screen.width <= 767) {
$('#fbForm2').find('input, textarea').each(function () {
$(this).keyup(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm2') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
});
$('#terms').change(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm2') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
} else {
$('#fbForm').find('input, textarea').each(function () {
$(this).keyup(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
});
$('#terms').change(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
}
//Checks if the form id has blank text fields
function checkFormFieldsEmpty(id) {
$(id).find('input, textarea').each(function () {
//Check whether the input/textarea is blank
if(!$(this).val()) {
//If the input/textarea is empty return false
return false;
}
});
return true;
}
$('#btnSubmit').tooltip();
$(document).on('click', '#btnSubmit', function (event) {
if($('#btnSubmit').hasClass('disabled')) {
$('#btnSubmit').tooltip({
animation: false,
delay: {show: 500, hide: 100},
placement: 'right',
text: 'Invalid input fields',
});
} else {
grecaptcha.render('recaptchaField', {
'sitekey' : '6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF',
'callback' : onSubmit,
});
grecaptcha.execute(widgetId);
}
});
//-----------------------------------------------------------------------------------------
//recaptcha
var onSubmit = function (token) {
if (screen.width >= 768) {
document.getElementById("fbForm").submit();
}else if (screen.width <= 767){
document.getElementById("fbForm2").submit();
}
};
</script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
...
<div class="form-group">
<label class="col-md-4 control-label"></label>
<div class="col-md-4"><br>
<!-- NOTE: Made some changes for click events as advised here: https://developers.google.com/recaptcha/docs/invisible#programmatic_execute -->
<button id="btnSubmit" type="submit" value="" class="btn btn-success">SUBMIT <span class="glyphicon glyphicon-send"></span></button>
<div class="g-recaptcha" data-sitekey="6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF" data-callback="onSubmit" data-size="invisible"></div>
<!-- Test: 6LfuAWcUAAAAAEKjLeOZfygAMxAeld1k4UUMGnfN -->
<!-- Live: 6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF -->
</div>
</div>
«但是,我无法将验证码绑定到按钮,因为它会自动触发...»
这是一个可能是错误的假设。
您可以使用 .preventDefault()
阻止默认提交行为。所以你可以检查你的输入是否正确...如果是这样,请正常进行。
即:
$('#btnSubmit').on("click",function(e){
e.preventDefault();
// Check all you input are filled
// If yes, then submit for real:
$(this).closest("form").submit();
});
我想在提交时触发重新验证没有问题...
我有一个用于客户表单的 Recaptcha,他们只希望在单击提交按钮时显示 Recaptcha。
但提交按钮只有在所有输入字段都已填写时才可点击,他们希望在字段为空且单击按钮时显示工具提示。
如您所想,这意味着当有空字段时我无法禁用按钮,因为我需要一个 .click()
事件。但是,我无法将 recaptcha 绑定到按钮,因为它会自动触发所以我不得不做一个不可见的 recaptcha,其中 div
具有 data-sitekey
属性和 g-recaptcha
class.
所以我需要知道如何通过 JavaScript 触发 recaptcha 事件并使其具有与绑定到按钮相同的结果。
如果需要更多信息,请告诉我。
编辑:
var fieldsFilled = false;
if(screen.width <= 767) {
$('#fbForm2').find('input, textarea').each(function () {
$(this).keyup(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm2') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
});
$('#terms').change(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm2') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
} else {
$('#fbForm').find('input, textarea').each(function () {
$(this).keyup(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
});
$('#terms').change(function () {
fieldsFilled = checkFormFieldsEmpty('#fbForm') && $('#terms').is(":checked");
if(fieldsFilled) {
$("#btnSubmit").css("pointer-events","auto");
} else {
$("#btnSubmit").css("pointer-events","none");
}
});
}
//Checks if the form id has blank text fields
function checkFormFieldsEmpty(id) {
$(id).find('input, textarea').each(function () {
//Check whether the input/textarea is blank
if(!$(this).val()) {
//If the input/textarea is empty return false
return false;
}
});
return true;
}
$('#btnSubmit').tooltip();
$(document).on('click', '#btnSubmit', function (event) {
if($('#btnSubmit').hasClass('disabled')) {
$('#btnSubmit').tooltip({
animation: false,
delay: {show: 500, hide: 100},
placement: 'right',
text: 'Invalid input fields',
});
} else {
grecaptcha.render('recaptchaField', {
'sitekey' : '6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF',
'callback' : onSubmit,
});
grecaptcha.execute(widgetId);
}
});
//-----------------------------------------------------------------------------------------
//recaptcha
var onSubmit = function (token) {
if (screen.width >= 768) {
document.getElementById("fbForm").submit();
}else if (screen.width <= 767){
document.getElementById("fbForm2").submit();
}
};
</script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
...
<div class="form-group">
<label class="col-md-4 control-label"></label>
<div class="col-md-4"><br>
<!-- NOTE: Made some changes for click events as advised here: https://developers.google.com/recaptcha/docs/invisible#programmatic_execute -->
<button id="btnSubmit" type="submit" value="" class="btn btn-success">SUBMIT <span class="glyphicon glyphicon-send"></span></button>
<div class="g-recaptcha" data-sitekey="6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF" data-callback="onSubmit" data-size="invisible"></div>
<!-- Test: 6LfuAWcUAAAAAEKjLeOZfygAMxAeld1k4UUMGnfN -->
<!-- Live: 6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF -->
</div>
</div>
«但是,我无法将验证码绑定到按钮,因为它会自动触发...»
这是一个可能是错误的假设。
您可以使用 .preventDefault()
阻止默认提交行为。所以你可以检查你的输入是否正确...如果是这样,请正常进行。
即:
$('#btnSubmit').on("click",function(e){
e.preventDefault();
// Check all you input are filled
// If yes, then submit for real:
$(this).closest("form").submit();
});
我想在提交时触发重新验证没有问题...