views:

61

answers:

1

I have a select box that is default to nill But still in required I use a function that always returns false and validation stills validates my select

dob_year: {required: function(element){return false;}},

Is marked as valid, no matter what is returned.

Any clue?

jQuery validation plug-in 1.7 jQuery 1.4.2 jQuery UI 1.8

<select name="dob_year" id="id_dob_year">
<option value="" selected="selected">---</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>

<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
<option value="1999">1999</option>

<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
<option value="1993">1993</option>
<option value="1992">1992</option>
<option value="1991">1991</option>
<option value="1990">1990</option>

<option value="1989">1989</option>
<option value="1988">1988</option>
<option value="1987">1987</option>
<option value="1986">1986</option>
<option value="1985">1985</option>
<option value="1984">1984</option>
<option value="1983">1983</option>
<option value="1982">1982</option>
<option value="1981">1981</option>

<option value="1980">1980</option>
<option value="1979">1979</option>
<option value="1978">1978</option>
<option value="1977">1977</option>
<option value="1976">1976</option>
<option value="1975">1975</option>
<option value="1974">1974</option>
<option value="1973">1973</option>
<option value="1972">1972</option>

<option value="1971">1971</option>
<option value="1970">1970</option>
<option value="1969">1969</option>
<option value="1968">1968</option>
<option value="1967">1967</option>
<option value="1966">1966</option>
<option value="1965">1965</option>
<option value="1964">1964</option>
<option value="1963">1963</option>

<option value="1962">1962</option>
<option value="1961">1961</option>
<option value="1960">1960</option>
<option value="1959">1959</option>
<option value="1958">1958</option>
<option value="1957">1957</option>
<option value="1956">1956</option>
<option value="1955">1955</option>
<option value="1954">1954</option>

<option value="1953">1953</option>
<option value="1952">1952</option>
<option value="1951">1951</option>
<option value="1950">1950</option>
<option value="1949">1949</option>
<option value="1948">1948</option>
<option value="1947">1947</option>
<option value="1946">1946</option>
<option value="1945">1945</option>

<option value="1944">1944</option>
<option value="1943">1943</option>
<option value="1942">1942</option>
<option value="1941">1941</option>
<option value="1940">1940</option>
<option value="1939">1939</option>
<option value="1938">1938</option>
<option value="1937">1937</option>
<option value="1936">1936</option>

<option value="1935">1935</option>
<option value="1934">1934</option>
<option value="1933">1933</option>
<option value="1932">1932</option>
<option value="1931">1931</option>
<option value="1930">1930</option>
<option value="1929">1929</option>
<option value="1928">1928</option>
<option value="1927">1927</option>

<option value="1926">1926</option>
<option value="1925">1925</option>
<option value="1924">1924</option>
<option value="1923">1923</option>
<option value="1922">1922</option>
<option value="1921">1921</option>
<option value="1920">1920</option>
<option value="1919">1919</option>
<option value="1918">1918</option>

<option value="1917">1917</option>
<option value="1916">1916</option>
<option value="1915">1915</option>
<option value="1914">1914</option>
<option value="1913">1913</option>
<option value="1912">1912</option>
<option value="1911">1911</option>
<option value="1910">1910</option>
</select>
+1  A: 

Update based on comments: This function:

dob_year: { required: function(element) { return false;}}

I saying "the dob_year element is never required". What the function returns doesn't determine if the element passes validation, it determines if it's required, and by return false; it's saying that it's never required...so it's really not validating anything. If you want a custom validation method, you need to go a different route, by adding a custom method like this:

jQuery.validator.addMethod("customMethod", function(value, element) { 
  return false; 
}, "This will never pass!");

Then call it like this:

dob_year: { customMethod: true; }

You can see a working demo doing exactly this here.

Nick Craver
Sorry I posted it wrong ... actually the code is dob_year // dob_year: {required: function(element){return false;}},
Esteban Feldman
@Esteban - In that case, what do you *want* it to do? The dependency callback returns whether it's required...currently your function is saying "it's **never** required", I think you want `return true;` here if you want the required message to always pop up.
Nick Craver
My code is a little more complicated than that, what I'm trying to show is that no matter what that function is returning for the plugin will be always valid. I will do a stand alone test.
Esteban Feldman
@Esteban - I think what you're after here is the custom function, not piggybacking on required's dependency callback...see my updated answer for how to do this.
Nick Craver
@nick that did it. But one thing I don't understand ... if a function can be used in required... why doesn't work as per the API documentation? http://docs.jquery.com/Plugins/Validation/Methods/required#dependency-callback btw, Thanks a lot!
Esteban Feldman
@Esteban - It does work that way :) If your function returns `true`, it's required, if not it's not required, see here for a quick test: http://jsfiddle.net/rsTuc/1/ This is often used in a case like `txtOther` is only required if "Other" is your selected radio button value, something like that.
Nick Craver