2012-01-11 60 views
1

我在我的HTML代码:jQuery - 如何动态更改值?

<input class="hidd" type="radio" name="org1" value="1" /> 
<input class="hidd" type="radio" name="org1" value="2" /> 
<input class="hidd" type="radio" name="org1" value="3" /> 

<input type="hidden" id="crc" name="crc" value="20120109|0" /> 

欲jQuery的检测哪个项目是由用户选择的,然后根据下式设定值: 如果与值“1”单选按钮被用户选择,则id =“crc”的输入值应该是:“20120109 | 1”而不是“20120109 | 0”。换句话说 - 在符号“|”之前保留所有数字并且只更改此符号“|”后面的值。我怎样才能做到这一点?也许从id =“crc”取值,删除最后一个数字并添加新数字?或者用另一种方式?

$('.hidd').click(function() { 

}); 
+4

究竟为什么你需要做到这一点?只需要两个隐藏的'input'元素,'crc_date'和'crc_choice'。 – lonesomeday 2012-01-11 13:40:34

+1

并在你写了'.click()'方法后,你停止尝试? – meo 2012-01-11 13:41:11

+0

要选择id ='“crc”'的元素,您可以使用'$('#crc')' – itdoesntwork 2012-01-11 13:42:25

回答

2

试试这个:

$('.hidd').click(function() { 
    var crc = $("#crc").val().split("|"); 
    $("#crc").val(crc[0] + "|" + $(this).val()); 
}); 

或者覆盖选择选项的所有可能的方法:

$('.hidd').change(function() { 
    var crc = $("#crc").val().split("|"); 
    $("#crc").val(crc[0] + "|" + $(this).val()); 
}); 
+0

只需注意一点:只有点击元素时才会触发'click'除非被不同的脚本人为地解雇),所以更好的想法是使用'change'而不是'click'。顾名思义,它会在值更改时被触发,所以OP的要求(“_item被user_选中”)应该满足,然后:) – Tadeck 2012-01-11 13:57:25

+0

@Tadeck谢谢,已更新。 – 2012-01-11 13:59:12

+0

我很高兴我帮助:) – Tadeck 2012-01-11 14:04:23

0
$('.hidd').click(function() { 
    $("#crc").val('20120109|' + $(this).val()); 
}); 
1
$('.hidd').click(function() { 
    var v = $('#crc').val().split('|'); 
    $('#crc').val(v[0] + '|' + $(this).val()); 
}); 
+2

这只会对点击做出反应,因此以不同方式进行更改(例如,通过键盘或使用触发功能的设备,可能不会触发'click'事件)将不会触发代码OP的需要。 – Tadeck 2012-01-11 13:46:27

+0

是的,但它看起来好像隐藏了'class =“hidd”',所以没有触摸或键盘访问。 – PiTheNumber 2012-01-11 13:48:33

+0

@PiTheNumber,包含结果的元素是隐藏的元素,而不是接收'click' /'change'事件的单选按钮。 – 2012-01-11 13:53:17

1

使用jQuery的val()方法,字符串的split()方法你会得到一些事情摹状:

var crc = $('#crc'); 
var radio = $(':radio[name="org1"]'); 
crc.val(crc.val().split('|')[0] + '|' + radio.val()); 

如果你想这时候的单选按钮的值更改被触发,然后执行以下操作(jQuery的1.7+):

$(':radio[name="org1"]').on('change', function(){ 
    var crc = $('#crc'); 
    crc.val(crc.val().split('|')[0] + '|' + $(this).val()); 
}); 
+0

在''|''部分(*在第二个示例*)后缺少'+'。 – 2012-01-11 13:55:21

+0

@ GabyakaG.Petrioli:感谢您的更正:)这是一个错字。 – Tadeck 2012-01-11 13:58:42

0
$('.hidd').click(function() { 

    $('#crc').val('20120109|' + $(this).val()); 
}); 
1

这应该做它

$('.hidd').change(function() { 
    var crc = $('#crc'); 
    var value = crc.val(); 
    crc.val(value.split('|')[0] + '|' + this.value); 
}); 

演示在http://jsfiddle.net/gaby/cmCS9/


或正则表达式的方式

$('.hidd').change(function() { 
    var crc = $('#crc'); 
    var value = crc.val(); 
    crc.val(value.replace(/\d+$/, this.value)); 
}); 

演示在http://jsfiddle.net/gaby/cmCS9/1/

+0

“正则表达式的方法”很好,但如果他决定在第二部分中添加数字以外的东西,那么这种方法将不起作用。 – 2012-01-11 13:58:05

-1
$('.hidd').change(function() { 
    var previousVal=$("input[type='hidden']").val(); 
    $("input[type='hidden']").val(previousVal+$(this).val()); 
}); 
+0

这将附加到现有的值,并可能以'20120109 | 0 | 1 | 2 | 3'结尾# – 2012-01-11 13:47:08

+0

Rory,你是老鹰的眼睛:) – 2012-01-11 13:49:16

+0

@RoryMcCrossan:至少它会在正确的时刻触发,不仅当点击;) – zizozu 2012-01-11 13:49:17

0
$('.hidd').click(function() { 
    if($(this).is(":checked")) { 
     $("#crc").val($("#crc").val().replace("/|[0-9]/","|" + $(this).val())); 
    } 
}); 
0

使用正则表达式

$('.hidd').click(function() { 
     var crc = $("#crc"), 
      $this = $(this); 
     if($this.is(":checked")) { 
      crc.val(crc.val().replace("/[0-9]$/", $this.val()); 
     } 
    } 
0

您可能想要考虑超越jQuery以达到JavaScript正则表达式的真棒威力: “20120109 | 0”.match(“[0-9] * \ |”) 将返回“20120109 |”。

与jQuery和要求,一起把这个:

$('.hidd').change(function() { 
    var crc = $("#crc"), 
     old = crc.val(), 
     num = $(this).val(), 
     pfx = old.match("[0-9]*\\|"), 
     nvl = pfx + num; 
    crc.val(nvl); 
    // here you will want to return true or false 
});