使用jQuery按值选择我的麻烦输入
Select my troublesome input by value using jQuery
我有类似的HTML输入,从voucher1到voucher10:
<input maxlength="20" type="text" name="voucher1" id="voucher1" title="Voucher" class="input" value="">
共有10个字段,每个字段都有一个唯一的名称和ID。我目前有一个函数,它将字段值组合成一个数组,并返回一个变量,称为duplicate(如果之前键入了凭证)。目标是选择ID最大的输入(即字母数字:voucher10将大于voucher8),并在显示"不允许重复"消息的同时将包含该重复的字段置空。
我的重复变量函数运行得很好,它立即使用.on(input, function)
返回重复值。每当我键入重复的值时,也会显示消息。我遇到的问题是选择哪怕一个与重复值匹配的输入。若我在浏览器中检查输入,那个么我的类型值似乎并没有DOM表示。我可以在3或4个字段中键入"ninja",但它永远不会显示。正因为如此,我似乎无法根据值来选择输入。
我宁愿不循环浏览每张代金券,而是单独检查。看起来jQuery可以检查所有包含"ninja"的输入,然后我可以使用.val("")
将其置空。这很棘手,因为HTML属性"value"永远不会改变。有什么想法吗?
这是我的代码,它可以在数组中找到重复项,以备有人需要。然而,主要关注的是选择一个值属性永远不会更改的HTML输入。除了".ninja"包含另一个失败尝试的部分外,以下功能运行良好:
$(".voucher-input").focusout(function(){
var sorted_goodvouchers = vouchers.sort(); // You can define the comparing function here.
// JS by default uses a crappy string compare.
var results = [];
for (var i = 0; i < vouchers.length - 1; i++) {
if (sorted_vouchers[i + 1] == sorted_vouchers[i]) {
results.push(sorted_vouchers[i]);
// if there are duplicates
console.log("results");
console.log(results);
$(".ninja"):contains(results).val("fail");
$( "#dupmsg" ).show( "slow" );
} else {
$( "#dupmsg" ).hide( "slow" );
}
}
});
我承认我并不真正理解您当前的重复检测功能。这与我对你试图实现的目标的描述不符。特别是,我认为没有必要对任何事情进行分类。分拣成本高昂,应避免分拣。
如果我的理解是正确的,那么我将使用重复检测函数来构建并返回一个包含具有重复值的字段的jQuery集合,忽略任何重复集合中索引最低的字段。
$(function($) {
function findDuplicates($fields) {
var duplicates = []; //empty array
$fields.each(function (i, field_i) {
$fields.each(function (j, field_j) {
if (j > i && field_i.value != '' && field_i.value === field_j.value) {
duplicates.push(field_j);
}
});
});
return $(duplicates); //return a jQuery collection of duplicate fields
}
var $voucherFields = $("input[name^='voucher']").on('focusout', function () {
var $duplicates = findDuplicates($voucherFields.removeClass('duplicate')).addClass('duplicate');
if ($duplicates.length) {
$("#message").text("No duplicates allowed"); //put message in the message field
}
});
});
演示
注:
j > i
测试可确保:- 没有将每个字段与自身进行比较
- 返回的集合中只包含索引较高的字段
field_i.value != ''
测试确保- 空字段不进行比较
- 你能帮我解决感冒的麻烦吗
- 使用jQuery按值选择我的麻烦输入
- 我应该麻烦清理node.js中的数组吗
- 有麻烦得到我的css和js文件加载
- 在我的应用程序中声明和链接控制器时遇到麻烦
- 我'我有麻烦的语法为我的比较函数的javascript
- 在获得我的第一个jquery小部件时遇到了麻烦
- 麻烦使用谷歌地图api在我的ionic应用程序
- 有麻烦与我的代码工作的IE或火狐
- 麻烦将我的函数应用于多个文本框
- 麻烦使我的Javascript工作与HTML
- 为什么我的JavaScript不工作?这似乎是麻烦与我的RegEx,但我不能弄清楚
- 我有一些麻烦传递一个事件到另一个函数在我的插件
- 有麻烦使我的开始按钮转换为停止
- 麻烦它给我404(未找到)-我点击我的提交后
- 麻烦提交我的表单(与jQuery验证)到同一页面与$_POST
- 有麻烦替换/**评论**/与其他东西在我的javascript和sql
- 我有验证和表单向导的麻烦
- 在我的主干视图中使用Mixins有麻烦
- 在Joomla上使用自定义滑块,它在我的机器上运行良好,在托管方面遇到了麻烦