jquery hide只能工作一次

问题描述:

我有一个区域,最初是隐藏的,应该根据字段的内容出现/消失。jquery hide只能工作一次

因此,如果用户选择通过信用卡付款 - 那么额外的领域打开,如果没有 - 然后他们消失。

问题是,它只能用于显示它们 - 不隐藏。

有人可以请在这里看到:http://bit.ly/dOCNQQ

提前感谢!

$(function(){ 
    $('#CCinfo').hide();  
    $('#paymethod').change(function(){ 
    var payme = $(this).val(); 
    if (payme=='CreditCard') { 
      $('#CCinfo').show("slow"); 
     } else { 
      $('#CCinfo').hide();  
     } 
    }); 
}); 

<tr> 
<td colspan="2" align="right"> 
    <strong>pay by:</strong><br /> 
    <input type="radio" name="paymethod" id="paymethod" title="*" class="required" value="CreditCard"/>credit card<br /> 
    <tr> 
    <td colspan="2" align="right"><strong>pay by:</strong><br /> 
    <input type="radio" name="paymethod" id="paymethod" title="*" class="required" value="CreditCard"/>credit card<br />&nbsp; 
    <input type="radio" name="paymethod" id="paymethod" title="*" class="required" value="Check"/>cash<br />&nbsp; 
    <input type="radio" name="paymethod" id="paymethod" title="*" class="required" value="At Dinner"/>check 
    </td> 
    </tr> 
    &nbsp; 
    <input type="radio" name="paymethod" id="paymethod" title="*" class="required" value="Check"/>cash<br />&nbsp; 
    <input type="radio" name="paymethod" id="paymethod" title="*" class="required" value="At Dinner"/> check 
</td> 
</tr> 
+1

抱歉,#2是不是平台“按需调试”。您需要提取您认为错误的代码,将其发布到此处,然后有人可以帮助您。通过发布一个链接到一个页面并要求“调试”,你不会向社区贡献任何东西,因为你问的问题不会对除你以外的任何人有任何用处。 – fresskoma 2011-03-07 23:40:40

+0

这很酷,我不介意调试。 – Dimitry 2011-03-07 23:45:22

在您的示例中,多个输入具有相同的ID“paymethod”,然后您可以使用它收听change事件。在HTML中,元素的id属性必须是唯一的,当您调用$("#paymethod")时,它只能找到具有此id的第一个输入。您应该删除公共ID属性或创建唯一的属性。您应该使用name属性来定位无线电输入。

因此HTML会是这样的:

<td align="right" colspan="2"><strong>pay by:</strong><br> 
    <input type="radio" value="CreditCard" class="required" title="*" name="paymethod">credit card<br>&nbsp; 
    <input type="radio" value="Check" class="required" title="*" name="paymethod">cash<br>&nbsp; 
    <input type="radio" value="At Dinner" class="required" title="*" name="paymethod"> check 
</td> 

的JS来获取无线电要素是:

$("input[name='paymethod']").change(function() { ... }); 
+0

非常好 - 谢谢你们! – kneidels 2011-03-07 23:53:41

所有的单选按钮都有相同的ID。当您选择$('#paymethod').val()时,您只能得到第一个单选按钮的值。巧合的是,这总是信用卡。

尝试:

$('input[name="paymethod"]').click(function (e) { 
    if (e.target.value == 'CreditCard') { 
     $('#CCinfo').show("slow"); 
    } else { 
     $('#CCinfo').stop().hide(); 
    } 
}); 

我看看你的代码。您不能有多个具有相同ID的输入元素。代码中发生这种情况的原因是,点击处理程序仅适用于ID为paymethod的第一个元素,而不是其他两个元素。只需为所有这些类使用一个通用类,然后将该处理程序绑定到该类。