2012-04-25 105 views
0

我遇到的问题是相当困难的我解释,但我在的jsfiddle复制它http://jsfiddle.net/6ms4T/1/jQuery的输入更新所有的ID,而不仅仅是一个需要

我想实现是更新“数量”文本框,我想显示其他地方的值(下面我将称之为“成本线”)。

基本上,更新第一个输入框(qty_item_1)正在更新'成本行'中的所有(quant_)ID,而不仅仅是与该产品相关的一个。

function recalc(){ 

$("[id^=quant_]").text($("input[id^=qty_item_]").val()); 

等等

全部代码是在这里:http://jsfiddle.net/6ms4T/1/

任何帮助,将不胜感激。

+0

你应该分享相关要素之间的公共类,以简化选择...... – jorgebg 2012-04-25 12:08:51

+0

我使用asp.net VB和需要有唯一的ID对每个输入框。 – 2012-04-25 12:11:21

+0

同意,但您也可以添加类来选择常用元素并简化jQuery代码。 – jorgebg 2012-04-25 12:28:48

回答

0

,可以看到正在改变的元素的ID,然后提取它的数字部分在你计算的休息使用。下面是我改的各个方面和working version

var uniqueOne = $(this).attr("id").match(/\d+/); 
$("[id^=quant_][id$="+uniqueOne+"]").text($("input[id^=qty_item_][id$="+uniqueOne+"]").val()); 

虽然不是最干净寻找代码,它的作用是发现与quant_开始和结束uniqueOne的ID。你可能会压缩这些,但它突出了结合两个选择器(开始与结束)。

看起来像你有很多伟大的想法可供选择。

编辑

如果你的ID不qty_item_启动,那么你就需要使用不同的选择。这个最低挂果实将是contains selectorid*=blah

更新版本的 '毛' IDS发现:http://jsfiddle.net/6ms4T/22/

编辑

以前的jsfiddle没有处理的总更新预期。这个更新版本应该通过识别所有通过ID查找DOM元素的情况来减少混淆;然而,这应该被重构的可能性很高:http://jsfiddle.net/6ms4T/24/

编辑

OP的标签产生了到他的ID各种数字和字母,但最终的数字是由一个下划线开头。重要的id因此在正则表达式/\d+$/中找到。正如其他海报所示,解决这个问题的方法不止一种。我个人喜欢用户gabitzish的。

+0

这在我的代码中不起作用,我从ctl00_EnquiryForm1_qty_item_中截取了qty_item_ id,因为我认为它不重要,但由于某种原因更新代码中的ID以匹配我的代码根本不起作用。有关于此的任何想法? – 2012-04-25 12:26:02

+0

@WebHippo; 'id^= qty_item_'表示id _starts with_' qty_item_'。如果它实际上以'ctl00 ...'开头,那么它肯定不会找到它。您可能需要使用[包含运算符](http://api.jquery.com/attribute-contains-selector/)来代替:'id * = qty_item' – veeTrain 2012-04-25 12:35:12

+0

它再次在此jsFiddle中工作,但不在我的asp窗体中,这很奇怪。不幸的是,我无法发布链接到相关页面的链接。 – 2012-04-25 13:05:18

0

可以让事情比较简洁,而且通过识别id的数字部分,然后使用该号码作为选择的一部分应用于事件只有特定的元素:

var idNum = this.id.match(/\d+/); 
$("#quant_" + idNum).text($("#qty_item_" + idNum).val()); 

JS Fiddle demo

参考文献:

+0

它不起作用......第二个数量更新为第一个输入值。 – gabitzish 2012-04-25 12:09:10

+0

哦。我会再看看那个。 – 2012-04-25 12:12:11

+0

@gabitzish你是对的,它不起作用。它会延迟更新,直到下一个数量更新,但仍然返回相同的值。 – 2012-04-25 12:12:20

1

添加一个包含输入信息的属性。我为第一个输入添加了一个属性“rel”,值为1,第二个为2,然后使用这个rel为li元素构建正确的id。

这里是一个更新工作的jsfiddle:http://jsfiddle.net/6ms4T/8/

0

更改recalc()函数的开始如下;

function recalc(e){ 
    var idx = $(e.target).attr('id').split('_').pop(); 
    $("[id^=quant_" + idx + "]").text($(e.target).val()); 

... }

+0

在发布的所有想法中,这一个在我的代码中起作用,但它在开始时用'1'作为目标和值,因此更新数量将会更新:1,10,11,12等。 – 2012-04-25 12:24:33

+0

输入框ID(如qty_item_1,qty_item_2)中的最后一个数字用于选择要显示数量的相关文本标签。 – rt2800 2012-04-25 12:33:10

+0

我同意,它只适用于'qty_item_1'和'qty_item_2',但是将您的代码转换为我的代码,在更新'qty_item_1'后更新'qty_item_',然后'qty_item_1'更新,但'qty_item_10', qty_item_11','qty_item_12'等 – 2012-04-25 13:08:11

相关问题