【问题标题】:jQuery - failed show/hide buttonsjQuery - 显示/隐藏按钮失败
【发布时间】:2014-12-26 14:04:41
【问题描述】:

我尝试使用 jQuery 添加表单,它成功了。
这次我尝试显示和隐藏一些按钮(#remove_form, #add_form)
但总是不工作:(

我的jQuery代码(参考this问题的答案):

$(document).ready(function(){
  var index_num       = 1;
  var max_num         = 7;

$("#add_form").click(function(e){
     e.preventDefault();
     if(index_num < max_num){ 
         index_num++;
         $("#event").each(function(){
              $(this).clone().insertAfter(this).attr("id","event" + index_num);              
              $("#add_form" + index_num).css("display","none");
              $("#remove_form" + index_num).css("display","inline");
           }); 
         }
      });

      $("#remove_form" + index_num).click(function(e){
        e.preventDefault(); $(this).parent(".row collapse").remove(); index_num--;
      });
  }); 

+) 我没有写“#add_form”按钮的css代码。就是这样:

#remove_form{
    display: none;  
}

HTML 代码:

    <div class="row collapse" id="event">
        <div class="small-2 large-2 columns">
            <h7>example</h7> 
        </div>      

        <div class="small-2 large-2 columns">
            <form>example</form>
        </div>  

        <div class="small-2 large-2 columns">
            <form>example</form>
        </div>

        <div class="small-1 large-1 columns">
            <h7>example</h7>
        </div>  

        <div class="small-2 large-2 columns">
            <form>example</form>
        </div>

        <div class="small-1 large-1 columns">
            <h7>example</h7>
        </div>

        <div class="small-2 large-2 columns">
            <button type="submit" class="button tiny alert" id="remove_form"></button>
        </div>  

        <div class="small-2 large-2 columns">
            <button type="submit" class="button tiny" id="add_form"></button>
        </div>  
    </div>

+) 点击“#add_form”按钮后的 HTML 代码:

<div class="row collapse" id="event">...</div>
<div class="row collapse" id="event7">...</div>
<div class="row collapse" id="event6">...</div>
<div class="row collapse" id="event5">...</div>
<div class="row collapse" id="event4">...</div>
<div class="row collapse" id="event3">...</div>
<div class="row collapse" id="event2">

     ...

        <div class="small-2 large-2 columns">
            <button type="submit" class="button tiny alert" id="remove_form"></button>
        </div>  

        <div class="small-2 large-2 columns">
            <button type="submit" class="button tiny" id="add_form"></button>
        </div>  
     </div>

我该如何解决这个问题?

【问题讨论】:

  • 请解释“失败”的性质:应该发生什么,后来发生了什么?
  • 根据定义,元素 ID 在页面中必须是唯一的。因此$("#event").each 看起来很可疑。请提供一些html。还提供比always failed 更好的问题陈述。
  • 为什么不使用 .show() 和 .hide() 而不是使用 css。如果您希望它发生,请在 () 中设置一个 0。
  • @charlietfl:编辑了我的问题。
  • 仍然不清楚预期的行为是什么。代码中没有任何 id 为 event 并且没有增量 ID 像 #remove_formXXX#add_formXXX

标签: javascript jquery html css


【解决方案1】:

只有在您知道您的商品是唯一的时,您才必须使用 id 属性。

如果您有多个id="event",那么您需要使用class="event"$(".event").each 而不是$("#event").each

如果我的假设是正确的,那么当您单击#add_form button 时,您正在尝试复制事件表单。然后,建议在#event 表单内提供一个删除按钮,以便每个克隆都有自己的删除按钮和一个在#event 元素之外的添加按钮。

如果你这样说,那就不是显示/隐藏,而是添加/删除 DOM 元素。

<div id="to_clone" style="display:none">
    <div class="row collapse" class="event">
        ...

        <div class="small-2 large-2 columns">
            <button type="submit" class="button tiny alert" class="remove_form"></button>
        </div>  
    </div>
 </div>

<div id="events_container">
    <button type="submit" class="button tiny" id="add_form"></button>
</div>

jQuery

$('#add_form').click(function(){
    event=$("#to_clone").html();
   $(this).before(event);
});

$(document).on('click', '.remove_form', function(){ 
    $(this).closest(".event").remove();
    return false;
});

如果您想知道如何提交这些表单,您可以添加一个将输入转换为 json 的函数。

function getEventsJson()
{
    var json='[';
    $('.event').each(function()
    {
        json=json+'{ "field1": "'+$(this).find('.field1class').val()+'","field2": "'+$(this).find('.field2class').val()+'"},';
    });
    json=json.replace(/,\s*$/, "");
    json=json+']'
    return json;
}

或者为每个事件提供它自己的表单并一一提交。

$('.event').each(function()
{
    var form=$(this).find('form');
    $.ajax({
        type:"POST",
        url: "/events",
        data: {
            'event' : form.serialize(),
        },
        dataType: 'json',
        success: function(data) {

        },
        error: function(data){

        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    相关资源
    最近更新 更多