2014-01-09 75 views
1

我正在使用一个自定义插件在我的网页上使用。这个插件用于对html表格进行分页,排序,搜索和启用选择。我已经完成了它的基础知识,但大部分只是需要重新格式化速度,但是..jQuery插件只运行一次

但我的问题是,我改变页面后,我无法与表交互。

我的代码与该表进行交互是:

$.fn.tableManipulation = function(objOptions) { 
    return this.each(function() { 
     var tm = new $.tableManipulation(objOptions) ; 

     // page controls 
     $("td#btnNext").click(function(event) { 
      objOptions = tm.changePage("next") ; 
     }) ; 
     $("td#btnPrev").click(function(event) { 
      objOptions = tm.changePage("previous") ; 
     }) ; 

     // search controls 
     $("button#searchSubmit").click(function(event) { 
      tm.searchTable() ; 
     }) ; 

     // sort controls 
     $("TD[id*='sortColumn']").click(function(event) { 
      tm.sortColumns(parseInt(this.id.match(/\d+/g), 10)) ; 
     }) ; 

     // sort selection 
     $("TR[id*='row']").click(function(event) { 
      tm.setSelection($(this)) ; 
     }) ; 
    }) ; 
} ; 

感谢

+0

只是我的意见,但你会更好地与第三方控制设计做这种事情(尽管好学习练习)。 –

+0

是的,我最近正在用DataTables和JQWidgets进行实验。我想了解更多关于Javascript和jQuery的知识,虽然我的知识目前相当有限 – VirtSE

+0

提供JSFiddle +1以及尝试一些复杂的东西来学习JQuery :)我强烈建议您也学习TypeScript或其他更高级别的Javascript伪语言,因为它们可以让你编写更复杂的代码,而且错误更少(通常更整洁),并且只输出Javascript。 –

回答

0

您可以使用on递延版本(适用于文件,以选择),而不是click,这样的事件做没有脱离:

// page controls 
$(document).on("click", "td#btnNext", function(event) { 
    alert("next"); 
    objOptions = tm.changePage("next") ; 
}) ; 

问题的原因是您正在重新创建事件所附的元素t o,但并不总是将事件重新连接到新元素(旧元素不再存在)。如果名称/ ID不会改变,那么听取更高级别的事件更容易(例如,document,但它可以是层次结构中不会更改的任何元素)。

+0

完美地工作,非常感谢。哦,好吧,我不知道这就是它发生的原因。我认为保持ID是一样的会让代码知道我想每次发生它都会发生同样的事情。我想,我必须看看更多关于这方面的信息。 – VirtSE

+0

保持相同的ID不起作用。您正在根据搜索/过滤器*将事件连接到元素的特定实例。只有延期选项在事件时间*处搜索元素*。 –