范围内的非重复数字,并从表单提交到页面

时间:2013-04-20 07:57:42

标签: javascript javascript-events

请问我能帮忙吗?

我需要从1到80的范围内选择一个非重复的随机数但不重复它。 而不是我的表单从我希望在java脚本中定义它的用户获取范围,并且在按下提交按钮时,它在文本区域中生成1到80范围内的非重复数字,就像这样的形式提交,清除和结果文本区域。

这是我的表单代码:

<form name="generate">
<table>
    <tr>
      <td colspan="2"><input TYPE="button" name="send_it" VALUE="ENTER" onClick="chooseRandom(this.form)">&nbsp; &nbsp; <input TYPE="reset" VALUE="CLEAR" onClick="clearForm(this.form)"><br />
      <br />
      </td>
    </tr>
    <tr>
      <td>Random Number:&nbsp;</td>
      <td><input TYPE="text" NAME="result" SIZE="5"></td>
    </tr>
  </table>
</form>

这是我的java脚本:

<script type="text/javascript">

function chooseRandom(form) {

var m = parseInt(form.lower.value);

var n = parseInt(form.upper.value) - m;

var output = Math.floor(Math.random() * n) + m;
        if (m < 0) {
            alert('Enter # greater than 0');
        }
        if (n > 79) {
            alert('Enter # less than 80');
        }

form.result.value = output;

}
// Clears the form

function clearForm(form) {

    form.upper.value="";

    form.lower.value="";

    form.upper.focus();

    form.upper.select();

}
</script>

任何帮助都会感激不尽。 TYVY Jared Moore

2 个答案:

答案 0 :(得分:3)

希望这就是你想要的:)我是新来回答这里的问题。

var rand = [];

for(var i = 1;i<=80;i++){
    rand.push(i);
}
function getRand(){
    var index = Math.floor(Math.random()*rand.length)
    return rand.splice(index,1)
}

答案 1 :(得分:1)

我相信这就是你要找的东西。您将不得不使用ajax发布表单,以便不进行重置“usedNumbers”的页面刷新。

<form id="generate" name="generate">
    <table>
        <tr>
          <td colspan="2"><input type="button" name="send_it" value="ENTER" onclick="chooseRandom(this.form)">&nbsp; &nbsp; <input type="reset" value="CLEAR" onclick="clearForm(this.form)">
          <br />
          <br />
          </td>
        </tr>
        <tr>
          <td>Random Number:&nbsp;</td>
          <td><input TYPE="text" NAME="result" SIZE="5"></td>
        </tr>
    </table>
</form>

<script>
function chooseRandom(form) {
    form.result.value = getNonRepeatingRandomNumberWithinRange();

    // Do ajax based post thereby preventing page refresh
}

var usedNumbers = [],
    min = 1,
    max = 80;

function getNonRepeatingRandomNumberWithinRange() {
    // Generate random number within range
    var num = Math.floor(Math.random() * max) + min;

    // If number already used, try again (if all slots are used we return the number anyway)
    if (contains(usedNumbers, num) && usedNumbers.length < max)
        return getRand();

    // Store number and return as value
    return usedNumbers[usedNumbers.length - 1] = num;
}

// Helper function for determining if an array contains value
function contains(arr, obj) {
    var i = arr.length;
    while (i--) {
        if (arr[i] === obj)
            return true;
    }
    return false;
}
</script>