2017-07-02 90 views
0

它应该相当简单。我正在尝试实现一个单选按钮组。当点击一个单选按钮时,它将在下面附加一个文本“测试”,当点击其他单选按钮时,第一个单选按钮上的文本将消失,第二个单选按钮将在其上添加文本。此外,还有一个按钮可动态添加单选按钮,并将更改事件添加到该单选按钮中。以下是我的代码:单选按钮更改事件无法正常启动

此代码的问题是,当我单击第二个单选按钮时,第一个单选按钮文本不会消失,并且当我检查第三个单选按钮时,第二个和第一个单选按钮文本不会不会消失。

我该如何解决?

function add() { 
 

 
    var cat_name = $('input.text').val(); 
 
    $('div.radioGroup').append('<div><div><input type="radio" name="cat" value="' + cat_name + '"/> ' + cat_name + '<br /></div></div>'); 
 

 
    var inputDOM = $('input[value="' + cat_name + '"]'); 
 

 
    $('input:radio[name="cat"]').on('change', function() { 
 
    // alert(cat_name); 
 

 
    console.log(""); 
 
    console.log(cat_name); 
 
    console.log(cat_name + " ischecked is " + $('input[value="' + cat_name + '"]').is(":checked")); 
 

 
    if ($('input[value="' + cat_name + '"]').is(":checked")) { 
 
     inputDOM.parent().after("<span style='margin-left:5em'>test</span><br>"); 
 
     // alert("yes is working"); 
 
    } else { 
 
     // alert("uncheck is working!"); 
 
     console.log("uncheck is working"); 
 
     inputDOM.parent().nextAll().remove(); 
 

 
    } 
 
    }); 
 

 

 
    $('input.text').val(''); 
 

 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<div class="radioGroup"> 
 

 
</div> 
 
<input type="text" name="text" class="text"> 
 
<button onclick="add()">Add</button>

+0

我创建你应该有那么现在它是一个[MCVE] – mplungjan

回答

0

移动

$('input:radio[name="cat"]').on('change', function() { 

的add()的外部和使用委托:

$('div.radioGroup').on("change",'radio[name="cat"]',function() { 

可能是这样的。来不及猜你真正想要的

function add() { 
 

 
    var cat_name = $('input.text').val(); 
 
    $('div.radioGroup').append('<div><div><input type="radio" name="cat" value="' + cat_name + '"/> ' + cat_name + '<br /></div></div>'); 
 
    $('input.text').val(''); 
 
} 
 

 
$('div.radioGroup').on('change', 'input:radio[name="cat"]',function() { 
 
    var cat_name=this.name, inputDOM = $('input[value="' + cat_name + '"]'); 
 
    console.log(""); 
 
    console.log(cat_name); 
 
    console.log(cat_name + " ischecked is " + $('input[value="' + cat_name + '"]').is(":checked")); 
 

 
    if ($('input[value="' + cat_name + '"]').is(":checked")) { 
 
    inputDOM.parent().after("<span style='margin-left:5em'>test</span><br>"); 
 
    // alert("yes is working"); 
 
    } else { 
 
    // alert("uncheck is working!"); 
 
    console.log("uncheck is working"); 
 
    inputDOM.parent().nextAll().remove(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<div class="radioGroup"> 
 

 
</div> 
 
<input type="text" name="text" class="text"> 
 
<button onclick="add()">Add</button>

+0

的cat_name应该被命名为值名称,而不是片段。这是单选按钮的价值。选择器按值区分。此外,它不起作用。现在文本甚至不再消失,一切都在堆积如山。我想要它,当你点击其他单选按钮时,第一个选中的按钮附加文字消失。 –

+0

我不明白。您不能取消选中收音机 - 您可以取消选中复选框。你可以点击前后显示一些图像吗?我想删除inputDOM并使用$(this)作为转换锚点 – mplungjan

相关问题