【问题标题】:How to select random textboxes in Jquery?如何在 Jquery 中选择随机文本框?
【发布时间】:2017-06-02 11:22:29
【问题描述】:

我说过,5 个标签 <textarea> 的文本框。如何随机选择 50% 的文本框?每个文本框都有不同的 ID。例如:

<textarea id = "text1" name= "name1"></textarea>
<textarea id = "text2" name= "name2"></textarea>
<textarea id = "text3" name= "name3"></textarea>
<textarea id = "text4" name= "name4"></textarea>
<textarea id = "text5" name= "name5"></textarea>

我可以在 ID 上使用某种随机函数吗?

【问题讨论】:

  • 选择 textarea 后你到底想做什么?
  • 生成一个 1-5 之间的随机整数,然后将其连接到 id
  • @SorangwalaAbbasali:选择文本框后,我想用随机单词填充选定的文本框。类似自动填充器的东西
  • 看到这个stackoverflow.com/questions/4306105/…你可以从中得到一个想法。

标签: javascript jquery


【解决方案1】:

查看How to get n no elements randomly from an array 以有效地从数组中选择n 随机元素(这将返回唯一 元素)。调整此解决方案,您可以执行以下操作:

// https://stackoverflow.com/questions/19269545/how-to-get-n-no-elements-randomly-from-an-array
function getRandom(arr, n) {
    var result = new Array(n),
        len = arr.length,
        taken = new Array(len);
    if (n > len)
        throw new RangeError("getRandom: more elements taken than available");
    while (n--) {
        var x = Math.floor(Math.random() * len);
        result[n] = arr[x in taken ? taken[x] : x];
        taken[x] = --len;
    }
    return result;
}

var textareas = $('textarea');
var randomTextareas = getRandom(textareas, textareas.length / 2);
randomTextareas.forEach(function(textArea) { 
  $(textArea).prop('value', 'hello');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="text1" name= "name1"></textarea>
<textarea id="text2" name= "name2"></textarea>
<textarea id="text3" name= "name3"></textarea>
<textarea id="text4" name= "name4"></textarea>

【讨论】:

  • 感谢您的回复。而不是“你好”,我怎样才能在其中传递一个函数?我只是用我的函数替换了“你好”,但它不起作用。 jsfiddle.net/y7c9v2nw
【解决方案2】:

使用Math.random()方法生成随机索引。

// get all textarea eleemnts as an array
var $t = $('textarea[id^="text"]').get();

// iterate upto half length
for (var i = 0, len = $t.length / 2; i < len; i++) {
  // generate random index and remove it from collection
  // where element can be remove using splice method
  // and which returns an array of removed elements       
  // get the elment from that array and update the value or do whatever you are trying to achieve
  $t.splice(Math.floor(Math.random() * $t.length), 1)[0].value = i;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="text1" name="name1"></textarea>
<textarea id="text2" name="name2"></textarea>
<textarea id="text3" name="name3"></textarea>
<textarea id="text4" name="name4"></textarea>
<textarea id="text5" name="name5"></textarea>

【讨论】:

  • 感谢您的回复。是否可以将函数作为值而不是 i 传递?我有一个函数可以做某事,然后从该函数返回的文本进入 .value。我们可以这样做吗?
  • @AnanSrivastava 调用函数而不是 i => ......1)[0].value = callSomeFunction();
  • 我做到了,先生。但对我来说,它会选择所有文本框并且值未定义。我很确定我在函数中传递了错误的参数。这是一个jsfiddle。 jsfiddle.net/p9Lgg0d5
  • @AnanSrivastava :函数没有返回任何内容......所以它是未定义的
  • @AnanSrivastava : jsfiddle.net/p9Lgg0d5/1 ,有各种错误...... 1. 你需要通过参考...... 2. $(textControl).prop('maxlength') 将始终 -1 因为它没有设置...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
相关资源
最近更新 更多