views:

49

answers:

2

So this should be a relativly easy thing for most people but I'm having trouble with it. I'm using the jquery validate plugin and would like to return a random vaule on success. Right now I'm trying to use.

     var success_message = new Array (); success_message[0] = "Good!";
     success_message[1] = "Ok!";
     success_message[2] = "Great!";
     success_message[3] = "Perfect!";
     success_message[4] = "Nice!";
     success_message[5] = "Awesome"; 
     var i= Math.floor(5*Math.random())

then where I need to output the value use

 $(document).ready(function(){
     var validator = $(".contactform").validate({ ...
              success: function(label) {
    label.addClass("valid").text(success_message[i])
 }
      }); //end form validate code
         });

This selects a random value but uses the same vaule for each success message instead of selecting a different one for each field

I'm sure There is an eaiser way to do this so feel free to scrap my code. I also don't think i Sorry I'm new to this i just thought it would be a fun idea to return a random sucess message.

Edit: Cleaned up code and got it partly working. Thanks

+1  A: 

You can store the messages array and calculate the message to show as you go, like this:

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
function getMessage() {
   return messages[Math.floor(Math.random() * messages.length)];
}

Give it a try here, then just call getMessage in your .text() call, like this:

label.addClass("valid").text(getMessage());
Nick Craver
This almost works but returns the same message for each field element.
BandonRandon
@BandonRandon - I was under the impression you had just one, just a moment :)
Nick Craver
@BandonRandon - Updated to be random per-element, I would suggest that you may want to go a step further and remove the used message as well, so it can't be repeated.
Nick Craver
Sorry, I should had made that clear there is one for each form element.
BandonRandon
@BandonRandon - No worries, give it a try now :)
Nick Craver
Great that works! Thank you, A few more questions, If I did want to make it not repeat how would I do that? Also because it's initializing on keyup It's regenerating with each keypress or mouse click. Can I use stop() or something to stop that?
BandonRandon
@BandonRandon - You would have to do a full re-validation, actually I'm not sure how you'd handle it in your case, aside from looping through the current labels, which is fairly expensive. It will re-generate every time by default, you could try `if(label.text() == '') label.text(getMessage())`, see if that stops your unwanted label-changing.
Nick Craver
I think because it's adding the class of "valid" something like this should work `function successMessage() { if(!$("label").hasclass("valid")){ return messages[Math.floor(Math.random() * messages.length)]; } }` but it dosen't
BandonRandon
+1  A: 
function sucess() {
 message = ["Good!","Awesome!","Super!","Nice!","Great!"];
 return message[Math.floor(Math.random() * message.length)];
}

 $(document).ready(function(){
     var validator = $(".contactform").validate({ ...
              success: function(label) {
    label.addClass("valid").text(success());
 }
      }); //end form validate code
         });
Mike Sherov