下面是我的代码,我试图隐藏和显示动态元素。我遇到的问题是,我只希望我的隐藏div只能一次显示一个,如果我只检查"其他"。但是,下面的代码将显示我拥有的所有#dynamicRows
的隐藏div。所以它适用于添加的初始#dynamicRow
,问题是我有两个或更多#dynamicRows
$('#dynamicRow').on('click', 'input[id^=race]', function () {
if ($(this).is(":checked")) {
if ($(this).val() == "Other") {
$(".cssclass").each(function (index) {
$(this).closest("div").show();
});
}
else {
$(".cssclass").each(function () {
$(this).closest("div").hide();
});
}
}
});
下面是动态行,为了帮助我显示html代码,但是,它不存在于屏幕上,用户将点击" ADD"生成下面的代码。我在生成动态行时没有问题,这不是我发布的原因。请注意我的单选按钮中的名称是由c#生成的,一切正常。问题不在于如何创建动态行,而是在C#中很好地处理。
动态第一行可以使用上面的jQuery:
<div id="dynamicRow">
<input type="radio" value="No" id="race[]" name="Person[hhhhhh].race"> No:
<input type="radio" value="Other" id="race[]" name="Person[hhhhhh].race"> Other:
<div id="iamhidden" class="cssclass">
I appear one at a time, when other radio button is checked
</div>
</div>
动态第二行不能使用上面的jquery,它将上面的表单事件作为它自己的事件,所以如果我检查第2行中的单选按钮,第一个动态行会响应该事件,反之亦然:
<div id="dynamicRow">
<input type="radio" value="No" id="race[]" name="Person[hhhhh].race"> No:
<input type="radio" value="Other" id="race[]" name="Person[hhhhh].race"> Other:
<div id="iamhidden" class="cssclass">
I appear one at a time, when other radio button is checked
</div>
</div>
答案 0 :(得分:0)
<强> Working Example 强>
id
在同一文档中应该是唯一的,用类替换重复的文件:
<input type="radio" value="No" class="race" name="Person[hhhhhh].race"> No:
<input type="radio" value="Other" class="race" name="Person[hhhhhh].race"> Other:
同时将class
而不是id
添加到C#代码生成的动态行中:
<div class="dynamicRow">
然后在你的js中使用这个类:
$(".cssclass").hide();
$('.dynamicRow').on('click', '.race', function () {
if ($(this).val() == "Other") {
$(this).next(".cssclass").show();
} else {
$(this).nextAll(".cssclass").hide();
}
});
希望这有帮助。
答案 1 :(得分:0)
试试这个:
$('body').on('click', '#dynamicRow', function () {
if ($(this).find('[value=Other]').is(":checked")) {
$(".cssclass").each(function (index) {
$(this).closest("div").show();
});
} else {
$(".cssclass").each(function () {
$(this).closest("div").hide();
});
}
});
答案 2 :(得分:0)
他是你想要的工作榜样。我只用js生成必需的。
提及的几点
var counter = 0;
function addNewEntry(){
++counter;
var str = '<div class="dynamicRow"><input type="radio" value="No" id="race[]" name="Person[hh'+counter+'].race"> No:<input type="radio" value="Other" id="race[]" name="Person[hh'+counter+'].race"> Other:<div id="iamhidden" class="cssclass"> I appear one at a time, when other radio button is checked</div> </div>';
$('#dynamicRowContainer').append(str);
$("#dynamicRowContainer .dynamicRow:last-child .cssclass").hide()
}
$('#dynamicRowContainer').on('change', '.dynamicRow > input', function () {
if(this.value=="Other"){
$(this).siblings('.cssclass').show();
}else{
$(this).siblings('.cssclass').hide();
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="addNewEntry()">Add New Entry</button>
<div id="dynamicRowContainer">
</div>
&#13;