2012-02-01 93 views
3

我最初得到这个代码并且一切运作良好:HTML(),然后单击处理

<div class="rm"> 
     <button id="sub" type="submit"> 
      <span>Registo</span> 
     </button> 
    </div> 

    <script type="text/javascript"> 
    $(document).ready(function() { 
     $(".rm>#sub").click(function(event) { 
      event.preventDefault(); 
      var formdata = $("#custom").serialize(); 
      $.ajax({ 
       url: "dojo/insert.php", 
       type: "post", 
       dataType: "json", 
       data: formdata, 
       success: function(data) { 
        switch (data.livre) { 

        case 'error': 
         $(".rm").html('<button id="sub" type="submit"><span>Rever</span></button>'); 
         break;      

        default: 
         $('#paginas').delay(50).load('profile_empresa_3.php');   
         break; 
        } 
       } 
      }); 
      return false;    
     }); 
    }); 
    </script> 

现在的问题。当我添加$(".rm").html("")与具有相同ID的按钮。如果我点击这个新按钮,页面被重新加载。我的问题是。如果添加的按钮具有相同的ID,为什么点击处理程序不重复?

感谢

+0

'ID'-S应该是唯一的。更好地使用相同的'''你的按钮 – 2012-02-01 17:39:34

+2

@Zoltan:在粘贴的代码中,新按钮替换旧的按钮。 jQuery 1.7中的 – 2012-02-01 17:43:20

回答

3

在您绑定的事件处理程序$(".rm > #sub")的时候,新的元素还不存在,因此jQuery的不能处理程序绑定到它。

你既可以重新绑定事件处理程序,或将其绑定到$('.rm')来代替,而事件委托(使用.on()):

$('.rm').on('click', '#sub', function() { // or use button instead of #sub 
    //... 
}); 

,而不是替换整个元素,但,似乎你可以只改变其文本内容:

$('#sub span').text('Rever'); 
// or 
$('.rm button span').text('Rever'); 

还要注意,ID被认为是独特的,具有在DOM中的两个元件具有相同的ID是无效。

1

ID需在页面上独一无二的。

要添加同样的动作为所有新动态创建的按钮,你需要做的是这样的:

$(".rm > .sub").live("click",function(event) { 
....  

但是,如果没有使用相同的ID,使用类,而不是因为我有以上。

+0

,live方法显然已被弃用。 – Daniel 2012-02-01 17:59:14

+0

啊,是的,我忘了! .delegate然后! – 2012-02-02 09:02:01

1

click函数将遍历DOM,并将该事件绑定到当时存在的所有元素。您稍后将创建一个新的DOM元素,该元素不会被绑定。

要按照您的方式完成此项工作,请参阅live()函数的jQuery文档。

产生的变化将是这样的:

$('#sub').live('click', function(event) { 
    //your implementation 
}); 
1

发生这种情况是因为事件绑定在唯一的DOM对象中,无论id是什么,当您删除初始按钮并用具有相同id的一个替代绑定到该按钮的事件消失时。

你可以做的是在变量中声明事件函数,当你重新制作按钮时,再次为它分配事件。

您的代码将是:

var btnEvent = function(e) { 
    e.preventDefault(); 
    var formdata = $("#custom").serialize(); 
    $.ajax({ 
     url: "dojo/insert.php", 
     type: "post", 
     dataType: "json", 
     data: formdata, 
     success: function(data) { 
      switch (data.livre) { 

      case 'error': { 
       $(".rm").html('<button id="sub" type="submit" onclick="return btnEvent(event)"><span>Rever</span></button>'); 

      } break;      

      default: 
       $('#paginas').delay(50).load('profile_empresa_3.php');   
       break; 
      } 
     } 
    }); 
return false;    
}; 
$(document).ready(function() { 
    $(".rm>#sub").click(btnEvent); 
});