【问题标题】:Show hide text box from a dynamic element jQuery c#从动态元素jQuery c#中显示隐藏文本框
【发布时间】:2016-04-28 14:39:23
【问题描述】:

下面是我的代码,我试图隐藏和显示动态元素。我遇到的问题是,如果我只检查“其他”,我只希望我的隐藏 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 代码,但是,它在屏幕上不存在,用户将单击“添加”以生成下面的代码。我在生成动态行方面没有问题,这不是我发布的原因。请注意,我的单选按钮中的名称是由 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,它把上面的表单事件作为自己的,所以如果我检查第二行中的单选按钮,第一个动态行会响应该事件,反之亦然:

<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>

【问题讨论】:

  • ID 应该是唯一的,如果您想将 ID 分配给超过 1 个元素使用类。
  • 你必须考虑 .each() 的用户。我希望这个线程可以帮助你:stackoverflow.com/questions/18966222/… 只是一个例子。还要避免使用id,尽量使用html标签来识别元素。
  • @Chris 我无法分配 id,因为 html 是一个动态表单,它是在 c# 中生成的,这就是为什么我有一个类调用 cssclass
  • 将 on 绑定到 body 而不是 ID。我相信这应该可以解决您的问题。
  • @Chris 我使用的 id "dynamicRow" 是 ajax 如何附加我的动态行,而不是附加到正文。

标签: javascript c# jquery html


【解决方案1】:

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();
    }
});

希望这会有所帮助。

【讨论】:

  • 我发布的 jquery 工作,它是 foreach 循环。我需要根据我当前所在的索引显示和隐藏。
  • 作品是什么意思?在所有行中使用相同的 id 会生成无效的 HTML 代码,并且会产生错误。
  • 我的意思是它可以工作,因为当初始行为 1 时触发 jquery 事件,即使行为 2 也是如此。顺便说一句,我有 class=race,但这也不起作用。基本上,如果我有 5 行动态 div,并且我选中“其他”单选按钮,则表单的所有其余部分都显示隐藏的 div。
  • 我不工作,这就像我最初的问题一样。你看到当我点击一个与“其他”不同的事件“否”时,div消失了吗?
  • 伙计,你的答案是如此接近。因此,当我连续单击“否”时,我应该什么也看不到,在同一行中,如果单击“其他”,我应该看到 div,现在如果我转到下一行,则遵循相同的过程。目前有你的答案,当我点击“其他”然后更改为“否”时,div 仍然存在。
【解决方案2】:

试试这个:

$('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();
        });
    }
});

【讨论】:

    【解决方案3】:

    他是你想要的一个有效的例子。我只用 js 生成所需的。

    有几点要提

    1. 您将事件侦听器添加到动态生成内容的父级。
    2. 如果 ID 不是唯一的,请避免使用 ID,如果需要,请首选类和伪选择器

    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();
         }
       
    });
    <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>

    【讨论】:

    • 我刚刚看到你是如何生成表单的,当然可以,但是我使用C#生成表单字段的集合,这些变量已经由系统提供,我需要工作与我发布的内容。如果我使用 js 进行附加,那么它会起作用,但是,事实并非如此,谢谢。
    猜你喜欢
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多