Reputation: 15949
I am more of a PHP person, not JS - and I think my problem is more a syntax problem ..
I have a small jQuery to "validate" and check input value .
It works ok for single words, but I need array.
I am using the inArray()
of jQuery .
var ar = ["value1", "value2", "value3", "value4"]; // ETC...
jQuery(document).ready(function() {
jQuery("form#searchreport").submit(function() {
if (jQuery.inArray(jQuery("input:first"), ar)){
//if (jQuery("input:first").val() == "value11") { // works for single words
jQuery("#divResult").html("<span>VALUE FOUND</span>").show();
jQuery("#contentresults").delay(800).show("slow");
return false;
}
// SINGLE VALUE SPECIAL CASE / Value not allowed
if (jQuery("input:first").val() == "word10") {
jQuery("#divResult").html("YOU CHEAT !").show();
jQuery("#contentresults").delay(800).show("slow");
return false;
}
// Value not Valid
jQuery("#divResult").text("Not valid!").show().fadeOut(1000);
return false;
});
});
now - this if (jQuery.inArray(jQuery("input:first"), ar))
is not working right .. every value that I put will be validated as OK . (even empty)
I need to validate only values from the array (ar) .
I tried also if (jQuery.inArray(jQuery("input:first"), ar) == 1) // 1,0,-1 tried all
what am i doing wrong ?
Bonus question : how to do NOT in array in jQuery ??
(the equivalent of PHP if (!in_array('1', $a))
- I sw somehre that it will not work , and need to use something like this : !!~
Upvotes: 22
Views: 134998
Reputation: 1
The Array.prototype
property represents the prototype for the Array
constructor and allows you to add new properties
and methods
to all Array
objects. we can create a prototype for this purpose
Array.prototype.has_element = function(element) {
return $.inArray( element, this) !== -1;
};
And then use it like this
var numbers= [1, 2, 3, 4];
numbers.has_element(3) => true
numbers.has_element(10) => false
See the Demo below
Array.prototype.has_element = function(element) {
return $.inArray(element, this) !== -1;
};
var numbers = [1, 2, 3, 4];
console.log(numbers.has_element(3));
console.log(numbers.has_element(10));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Upvotes: -1
Reputation: 844
Alternate solution of the values check
//Duplicate Title Entry
$.each(ar , function (i, val) {
if ( jQuery("input:first").val()== val) alert('VALUE FOUND'+Valuecheck);
});
Upvotes: 0
Reputation: 41533
You are comparing a jQuery object (jQuery('input:first')
) to strings (the elements of the array).
Change the code in order to compare the input's value (wich is a string) to the array elements:
if (jQuery.inArray(jQuery("input:first").val(), ar) != -1)
The inArray
method returns -1
if the element wasn't found in the array, so as your bonus answer to how to determine if an element is not in an array, use this :
if(jQuery.inArray(el,arr) == -1){
// the element is not in the array
};
Upvotes: 57
Reputation: 1692
As to your bonus question, try if (jQuery.inArray(jQuery("input:first").val(), ar) < 0)
Upvotes: 1