How can I validate this radio button? - javascript

How can I validate the radio field? It must be checked, if not checked, I would either like a err_radio441 to show up or an alert. I read some posts about checked but I am pulling from name because I know ID won't work. I am missing .checked or something. Any Help would be appreciated!
function validateForm() {
var primaryfullname=document.getElementById('primaryfullname').value.trim();
var birthdate=document.getElementById('birthdate').value.trim();
var radio441=document.getElementByName('radio441').value.trim();
var count=0;
if (primaryfullname.length==0) {
document.getElementById("err_primaryfullname").innerHTML="<br><span class='errorbar'>*You must enter a primary name</span>";
} else {
count++;
document.getElementById("err_primaryfullname").innerHTML="";
}
if (birthdate.length==0) {
document.getElementById("err_birthdate").innerHTML="<br><span class='errorbar'>*You must enter a primary birth date</span>";
} else {
count++;
document.getElementById("err_birthdate").innerHTML="";
}
if (radio441.length==0) {
document.getElementById("err_radio441").innerHTML="<br><span class='errorbar'>*You must select a gender</span>";
} else {
count++;
document.getElementById("err_radio441").innerHTML="";
}
if (count==3)
{
return true;
} else {
return false;
}
} // End Validation Function

Try using this:
var radio441 = document.getElementsByName('radio441');
// your other code
function checkRadio(elem){
for (var i = 0; i < elem.length; i++) {
if(elem[i].checked) return true;
}
return false;
}
if (!checkRadio(radio441)){
document.getElementById("err_radio441").innerHTML="<br><span class='errorbar'>*You must select a gender</span>";
} else {
count++;
document.getElementById("err_radio441").innerHTML="";
}
It loops through each radio button and returns true if any one of them is checked and false if none are.

if (!radio441.checked) {
// The radiobutton is not checked
} else {
// The radiobutton is checked
}
EDIT
To get the element by name you have to use document.getElementsByName('radio441')[0], assuming there's only one element with that name.
var radio441 = document.getElementsByName('radio441')[0];
if (!radio441.checked) {
// The radiobutton is not checked
} else {
// The radiobutton is checked
}

Related

How come multiple classes not targeting in textarea?

I want to use validate_empty_field function for both classes .log and .log2. For some reason only .log is targeted but .log2 textarea is not. When you click on text area, if empty, both should show validation error if the other one is empty or if both empty.
$(document).ready(function() {
$('#field-warning-message').hide();
$('#dob-warning-message').hide();
var empty_field_error = false;
var dob_error = false;
// $('input[type=text], textarea')
$('.log, .log2').focusout(function () {
validate_empty_field();
});
function validate_empty_field() {
var field = $('.log, .log2, textarea').val();
// var first_name_regex = /^[a-zA-Z ]{3,15}$/;
if (field.length == '') {
$('#field-warning-message').show();
$('#field-warning-message').html("Please fill out form!");
empty_field_error = true;
} else if (field.length < 1) {
$('#field-warning-message').show();
$('#field-warning-message').html("Please fill out form!");
empty_field_error = true;
} else {
$('#field-warning-message').hide();
}
}
$('.verify-form').submit(function () {
empty_field_error = false;
dob_error = false;
validate_empty_field();
if ((empty_field_error == false) && (dob_error == false)) {
return true;
} else {
return false;
}
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea class="log"></textarea>
<textarea class="log2"></textarea>
<div id="field-warning-message"></div>
You should pass the event to the handler so you have access to the target
Change your event listener line to this:
$('.log1, .log2').focusout(validate_empty_field);
and then accept an argument in validate_empty_field
function validate_empty_field(ev){
var field = $(ev.target).val();
if(!field.length){
//textarea is empty!
}else{
//textarea is not empty!
}
}
in fact, you could do all of this in an anonymous function you have already created, and use the on method to stick with JQuery best practices:
$('.log1, .log2').on('focusout', function(){
if(!$(this).val().length){
//this textarea is empty
}else{
//this textarea is not empty!
}
});
And yes, adding one class to all textareas and swapping out .log1, .log2 for that class would be a better option.
EDIT: Final option should cover all requirements.
$('.log').on('focusout', function(){
$('.log').each(function(){
if(!$(this).val().length){
//this textarea is empty
}else{
//this textarea is not empty!
}
}
});

disable anchor link '<a>' if one of my six checkboxes are not checked

How can I disable a anchor link if one(1) of my six(6) checkbox is not check?
var first_option = $('#pid-1590083, #pid-1590090, #pid-1590091, #pid-1590092, #pid-1590093, #pid-1590094');
$("a").click(function(e) {
if($("first_option").prop("checked") === false) {
e.preventDefault(); return false;
} else {return true;};
});
Your current logic doesn't work as you're only looking at the checked property of the first element you select, not all of them.
To achieve what you require, you can use the :checked selector to get all the checked elements within the selectors you provide, then check the length property of the result to see if there aren't any. Try this:
var $first_option = $('#pid-1590083, #pid-1590090, #pid-1590091, #pid-1590092, #pid-1590093, #pid-1590094');
$("#tmp_button-99035").click(function(e) {
if ($first_option.filter(':checked').length === 0) {
e.preventDefault();
alert('Please Choose Collar Colour To Continue');
};
});
first_option.prop("checked") will always check for first element. What you have to do is loop over all elements to check
Like this
$("#tmp_button-99035").click(function(e) {
var isChecked = false;
for (var i = 0; i < first_option.length; i++) {
if (first_option.eq(i).prop("checked")) {
isChecked = true;
break;
}
}
if (!isChecked) {
alert('Please Choose Collar Colour To Continue');
e.preventDefault();
}
return isChecked;
});
Well, the js snippet of yours is only checking the first element. So, you have to track other checkboxes as well for correct result.
var first_option = $('#pid-1590083, #pid-1590090, #pid-1590091, #pid-1590092, #pid-1590093, #pid-1590094')
$(document).on('click', '#tmp_button-99035', function (e) {
if ($(first_option).filter(":checked").length == 0) {
e.preventDefault();
}
});

Adding select/deselect all to dynamic tabular form

I have a form which contains buttons to add and delete rows. My javascript function to check all checkboxes works for the first row, but once I add more rows to the form, the first row is still the only one that gets checked.
Any tips?
Here is my javascript function:
<code>
//checks all rows
function checkAll() {
var masterCheck = document.getElementById('masterCheck');
var on = false;
if(masterCheck.checked==true) {
document.getElementById('checkbox').checked=true;
} else {
document.getElementById('checkbox').checked=false;
}
}
</code>
And here is the form:
http://crimsonroot.com/files/freelance/new.html
Any help is appreciated!
I found out what was wrong! #Mohammed your answer really helped. There were just one or two syntax errors that I found. In order to check and uncheck all of the boxes, I needed to add a boolean variable as an input to the function as follows:
//checks all rows
function checkAll(bool) {
var masterCheck = document.getElementById('masterCheck');
var allcheck = document.getElementsByClassName('checkbox');
var on = false;
for (var i = 0; i < allcheck.length; i++) {
if (masterCheck.checked == true) {
allcheck[i].checked = true;
} else {
allcheck[i].checked = false;
}
}
}
For some reason, this was the final piece to the puzzle. Thanks for all of the help!
You should try something like this.
$("#masterCheck").click(function () {
$('input:checkbox').not(this).prop('checked', this.checked);
});
Since document.getElementById() returns first element, because id cannot be used more than one. To make it usable, add a class checkbox and try the following code:
//checks all rows
function checkAll() {
var masterCheck = document.getElementById('masterCheck');
var allcheck = getElementsByClassName('checkbox');
var on = false;
for (var i = 0; i < allcheck.length; i++) {
if (masterCheck.checked == true) {
allchecked[i].checked = true;
} else {
allchecked[i].checked = false;
}
}
}

javascript which I wrote is wrong(may be)

I have tried to write js for my html form. js is working fine with the logically. But if logic fails,I mean if any condition fails it reloads the page,which I don't want. I am providing the code. Please point me out the mistake in js if any.
window.onload = function() {
document.getElementById('submitlink').onclick = function() {
var bflag = document.addpro.brandflag;
var brand = document.addpro.brand1.value;
var cflag = document.addpro.catflag;
var cat = document.addpro.cat1.value;
var color1 = document.addpro.color1.value;
var color2 = document.addpro.color2.value;
if(cb_validation(bflag,brand))
{
if(cb_validation(cflag,cat))
{
if(colorcheck(color1,color2))
{
document.getElementById('addproform1').submit();
return false;
}
}
}
}
function cb_validation(flag,field)
{
if(flag[0].checked)
{
if(field==0)
{
alert('Please Select Both Brand And Category');
field.focus();
return false;
}
else
return true;
}
else
return true;
}
function colorcheck(c1,c2)
{
if((c1==0) && (c2==0))
{
alert('Please Select Both Colours');
document.addpro.color1.focus();
return false;
}
else if((c1==0))
{
alert('Please Select 1st Colour');
document.addpro.color1.focus();
return false;
}
else if((c2==0))
{
alert('Please Select 2nd Colour');
document.addpro.color2.focus();
return false;
}
else
return true;
}
}
I am rookie in js. Please also tell me if I have done any mistake.
return false is what keeps the page from reloading. Right now it is inside your final color check condition. If you never want the page to reload it needs to be after your first cb_validation condition.
Submit() is causing the page refresh which is in below line
document.getElementById('addproform1').submit();
Also both your function is returning true becauseyou are returning true in else block. Hope this points you to right direction....
Good luck....

Get Value Of File Input for Validation

I've been using JQuery validation for all of my forms on my website but I've just started on an upload script for image files and it's not validating correctly. Here is the code that I have:
$(document).ready(function()
{
var avatarok = 0;
//Post Avatar
$('#avatar').blur(function()
{
var avatar=$("#avatar").val();
if(avatar.length < 1){
avatarok = 0;
}
else{
avatarok = 1;
}
});
// Submit button action
$('#avatarButton').click(function()
{
if(avatarok == 1)
{
$('.avatarValidation').addClass("sending");
$("#avatarForm").submit();
}
else
{
$('.avatarValidation').addClass("validationError");
}
return false;
});
//End
});
When I click on the button (avatarButton) it always shows the error class, even if a file has been selected. Any theories?
check the below solution and blur condition not executing so that u are getting same message
// Submit button action
$('#avatarButton').click(function()
{
var avatar=$("#avatar").val();
if(avatar == 1)
{
$('.avatarValidation').addClass("sending");
$("#avatarForm").submit();
}
else
{
$('.avatarValidation').addClass("validationError");
}
return false;
});
//End
and remove your blur function no use

Categories

Resources