javascript - 项目未从输入更改函数内的数组中删除
问题描述
下面是我的 HTML 代码
<div id="createCaseImgContainer">
<div id="createCaseImgUploadBtn">+</div>
</div>
<div id="createCaseImgFileInputContainer">
<input type="file" name="createCaseImg1" id="0" class="createCaseImgInput" accept="image/*" />
<input type="file" name="createCaseImg2" id="1" class="createCaseImgInput" accept="image/*" />
<input type="file" name="createCaseImg3" id="2" class="createCaseImgInput" accept="image/*" />
<input type="file" name="createCaseImg4" id="3" class="createCaseImgInput" accept="image/*" />
</div>
这是jquery
$(document).ready(function() {
var inputs = $('.createCaseImgInput');
var $availableInputs = [0, 1, 2, 3];
var randomAvailableInputs = $availableInputs[Math.floor(Math.random()*$availableInputs.length)];
$(document).on('click', '#createCaseImgUploadBtn', function() {
$("#"+randomAvailableInputs).trigger('click');
});
inputs.on('change', function() {
triggeredInputNumber = $(this).attr('id');
removeInputNumber = parseInt(triggeredInputNumber);
$availableInputs = $availableInputs.splice($availableInputs.indexOf(removeInputNumber), 1);
console.log(removeInputNumber );
console.log($availableInputs);
});
});
我已经为可用输入字段创建了一个与 ID 链接的数字列表,单击 createCaseImgUploadBtn 后,它会触发列表中的任何随机输入,在选择文件后我想从 availableInputs 中删除数字,但它不起作用。基本上重点是我不希望它在选择文件后再次触发相同的文件输入字段。
解决方案
问题是您使用拼接重新分配。不需要那个。只需使用拼接。Splice 改变数组的内容
其次,您在randomAvailableInputs
上初始化值document.ready
。每次单击按钮时,该值都将保持不变。
您需要randomAvailableInputs
在单击按钮时为其赋值,以便值根据$availableInputs
数组而变化。
检查下面
$(document).ready(function() {
var inputs = $('.createCaseImgInput');
var $availableInputs = [0, 1, 2, 3];
$(document).on('click', '#createCaseImgUploadBtn', function() {
// move this here
var randomAvailableInputs = $availableInputs[Math.floor(Math.random() * $availableInputs.length)];
$("#" + randomAvailableInputs).trigger('click');
});
inputs.on('change', function() {
triggeredInputNumber = $(this).attr('id');
removeInputNumber = parseInt(triggeredInputNumber);
$availableInputs.splice($availableInputs.indexOf(removeInputNumber), 1);
console.log(removeInputNumber);
console.log($availableInputs);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="createCaseImgContainer">
<div id="createCaseImgUploadBtn">CLICK ME</div>
</div>
<div id="createCaseImgFileInputContainer">
<input type="file" name="createCaseImg1" id="0" class="createCaseImgInput" accept="image/*" />
<input type="file" name="createCaseImg2" id="1" class="createCaseImgInput" accept="image/*" />
<input type="file" name="createCaseImg3" id="2" class="createCaseImgInput" accept="image/*" />
<input type="file" name="createCaseImg4" id="3" class="createCaseImgInput" accept="image/*" />
</div>
推荐阅读
- laravel - Laravel取消链接不会删除文件
- javascript - 我无法在 excel web add in (javascript) 中保存对代码的更改
- r - 如何计算 Quanteda 中多词表达的频率?
- linux - 源子中的父脚本名称
- wordpress - 在 Woocommerce 产品属性中保存 URL
- flutter - 将 DraggableScrollableSheet 添加到 Sliver 页面的底部
- excel - Excel VBA多次重复3行相同的值
- c++ - 在 C++ 中检查枚举变量的无效值
- lumen - 找不到路由时的 Lumen API 自定义错误消息
- python - django python - 如何列出列表的渐进数值