Forum Moderators: open

Message Too Old, No Replies

Random Input Picker Javascript

just a small issue

         

cookiemonster

3:09 am on Jan 2, 2010 (gmt 0)

10+ Year Member



I am designing a page where a user can input up to eight different texts, and after clicking a button, it will display a randomly picked text.
I only have one problem - if a text field is blank, I want it to be excluded from the possible outcomes.

For example, if the user leaves one of the fields blank, I don't want there to be a possibility of displaying just a blank space instead of an actual text.

Here's my Javascript (generate.js):


(function () {
var generate = document.getElementById('generate');
generate.onclick = function () {
var name1 = document.getElementById('Text').value;
var name2 = document.getElementById('Text2').value;
var name3 = document.getElementById('Text3').value;
var name4 = document.getElementById('Text4').value;
var name5 = document.getElementById('Text5').value;
var name6 = document.getElementById('Text6').value;
var name7 = document.getElementById('Text7').value;
var name8 = document.getElementById('Text8').value;
var text = [
name1,
name2,
name3,
name4,
name5,
name6,
name7,
name8,
],
inc = Math.floor(Math.random() * text.length);
document.getElementById('result').innerHTML = text[inc];
}
})();

And here is the relevant HTML:


<html>
<body>
<form>
<input id="Text" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/>
<input id="Text2" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/>
<input id="Text3" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/>
<input id="Text4" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/><br>
<input id="Text5" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/>
<input id="Text6" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/>
<input id="Text7" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/>
<input id="Text8" style="font-size:13px; font-weight:bold" onKeyDown="if(event.keyCode==13) return false;"/><br>
<input value="Generate!" type="button" style="font-size:16px; font-weight:bold" id="generate"/>
</div><br>
<span style="border-top:1px solid #000000" id="result" align="center"></span>
</form>
<script type="text/javascript" src="generate.js"></script>
</body>
</html>

Thanks in advance!
PS, I know I've been pretty demanding on this forum lately, but I'm still really new to this stuff and this all really helps. Someday, I'll get good at this and give back to the community :P.

Kings on steeds

12:30 pm on Jan 2, 2010 (gmt 0)

10+ Year Member



Untested but these two options might work, the first just sets the value to "" to it won't return a blank space, it will just return nothing.


(function () {
var generate = document.getElementById('generate');
generate.onclick = function () {
var name1 = document.getElementById('Text').value ? document.getElementById('Text').value: "";
var name2 = document.getElementById('Text2').value ? document.getElementById('Text1').value: "";
var name3 = document.getElementById('Text3').value ? document.getElementById('Text2').value: "";
var name4 = document.getElementById('Text4').value ? document.getElementById('Text3').value: "";
var name5 = document.getElementById('Text5').value ? document.getElementById('Text4').value: "";
var name6 = document.getElementById('Text6').value ? document.getElementById('Text5').value: "";
var name7 = document.getElementById('Text7').value ? document.getElementById('Text6').value: "";
var name8 = document.getElementById('Text8').value ? document.getElementById('Text7').value: "";
var text = [
name1,
name2,
name3,
name4,
name5,
name6,
name7,
name8,
],
inc = Math.floor(Math.random() * text.length);
document.getElementById('result').innerHTML = text[inc];
}
})();

or the second, just dosen't add it to the array if it is blank, again untested but the idea is sound.


(function () {
var generate = document.getElementById('generate');
generate.onclick = function () {
var text = [];
var name1 = document.getElementById('Text').value ? text[] = document.getElementById('Text').value : "";
var name2 = document.getElementById('Text2').value ? text[] = document.getElementById('Text1').value : "";
var name3 = document.getElementById('Text3').value ? text[] = document.getElementById('Text2').value : "";
var name4 = document.getElementById('Text4').value ? text[] = document.getElementById('Text3').value : "";
var name5 = document.getElementById('Text5').value ? text[] = document.getElementById('Text4').value : "";
var name6 = document.getElementById('Text6').value ? text[] = document.getElementById('Text5').value : "";
var name7 = document.getElementById('Text7').value ? text[] = document.getElementById('Text6').value : "";
var name8 = document.getElementById('Text8').value ? text[] = document.getElementById('Text7').value : "";
inc = Math.floor(Math.random() * text.length);
document.getElementById('result').innerHTML = text[inc];
}
})();

Hope this helps.
Alan

cookiemonster

5:44 pm on Jan 2, 2010 (gmt 0)

10+ Year Member



Kings on steeds, thanks for your input, however neither of your methods seem to work for me ... maybe I'm doing something wrong, but I dun think so because I'm always right >=O.

Anyways, I'll keep trying to figure it out. Thanks again!

cookiemonster

6:09 pm on Jan 2, 2010 (gmt 0)

10+ Year Member



OK everybody ... I solved it.
It's pretty inefficient but what can I say? The purpose of the page itself is pretty darn inefficient.

I used the push() method and 8 if statements to make it work.

Here's the final code:


(function () {
var generate = document.getElementById('generate');
generate.onclick = function () {
var name1 = document.getElementById('Text').value;
var name2 = document.getElementById('Text2').value;
var name3 = document.getElementById('Text3').value;
var name4 = document.getElementById('Text4').value;
var name5 = document.getElementById('Text5').value;
var name6 = document.getElementById('Text6').value;
var name7 = document.getElementById('Text7').value;
var name8 = document.getElementById('Text8').value;
var text = [];

if (name1.length > 0)
{text.push(name1);}
if (name2.length > 0)
{text.push(name2);}
if (name3.length > 0)
{text.push(name3);}
if (name4.length > 0)
{text.push(name4);}
if (name5.length > 0)
{text.push(name5);}
if (name6.length > 0)
{text.push(name6);}
if (name7.length > 0)
{text.push(name7);}
if (name8.length > 0)
{text.push(name8);}
inc = Math.floor(Math.random() * text.length);
document.getElementById('result').innerHTML = text[inc];
}
})();

Guess I'm not so bad after all huh?
:P thanks for the help!

daveVk

6:43 am on Jan 3, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Shorter way to build array text

var text = [];
var el;
while ( var inc=1; (el=document.getElementById('Text'+inc)); inc++ ) {
if ( el.value.length > 0 ) { text.push(el.value); }
}

change the first id 'Text' to 'Text1'.

Also cater for case of all blank

if ( text.length > 0 )) {
inc = Math.floor(Math.random() * text.length);
document.getElementById('result').innerHTML = text[inc];
}