【问题标题】:Javascript/jquery .click() not triggering functionJavascript/jquery .click() 不触发函数
【发布时间】:2012-11-23 17:53:52
【问题描述】:

我有一个表格,其中一些功能在点击每行中的链接时触发:

相关部分代码为:

$('.my_table').inplacerowedit({
     url: myurl,
    });

在 inplacerowedit.js 文件中,我有:

(function($) {
    $.fn.inplacerowedit = function(options) {
        var ops = $.extend({}, $.fn.inplacerowedit.defaults, options);
        $(this).find(ops.editbuttonselector).on('click', function(e) {
    ... }

ops.editbuttonselector = 'a.edit'

我的表格每行都有一个编辑链接,它通常可以正常工作。我的问题是新创建的行。

这是我创建行并将其添加到表中的方式:

    new_row = null

    getNewRow = function() {
        if (new_row == null){
            new_row = $("<tr>");
            columns = {'name':'','type':'','value':'','edit':'','delete':''}
            for (var column in columns)
                new_row.append( $("<td>").addClass(column).text(columns[column]));
            links = ['edit','delete']
            for (var i=0;i<links.length;i++){
                link = links[i]
                a = $("<a href='"+link+"' class='"+link+"'>").text(link);
                new_row.find("."+link).append(a)
            }
        }
        return new_row
    };

    $("#addRowAndEdit").click(function(e){
        e.preventDefault();
           var row = getNewRow();
           $(".my_table").append(row);
           new_record = $('.my_table tbody>tr:last');
           new_record.find('a.edit').click(); //this is the line that is not working.
           ....
    }

更新:

如果我执行new_record.find('a.edit').on('click', alert('ok'));,则警报函数会起作用,但不会调用另一个函数。

有什么想法吗? 谢谢

【问题讨论】:

    标签: javascript jquery dynamic click


    【解决方案1】:

    使用event delegation,以便您新添加的行由附加到表的处理程序处理,而不是将其附加到每个单独的a 元素,为此,请替换inplacerowedit.js 中的以下行:

    $(this).find(ops.editbuttonselector).on('click', function(e) {
    

    对于这个:

    $(this).on('click', ops.editbuttonselector, function(e) {
    

    已编辑

    【讨论】:

    • 请编辑您的答案,以便我投票。所以不允许我投票。我投错了票。对不起
    • 很高兴我的回答能对您的问题有所帮助。
    【解决方案2】:

    如果您使用的是 1.6+ 的最新 jquery 版本,那么您应该试试这个:

    new_record.find('a.edit').live('click',function(){
        // All your desired stuff here
    });
    

    试试看这是否适合你。

    Just because you are dynamically creating the rows,对于这种情况.live()事件处理函数很有用。

    您可以在这里找到更多信息:http://api.jquery.com/live/

    【讨论】:

    • 你链接的那个页面有这个:从 jQuery 1.7 开始, .live() 方法已被弃用。使用 .on() 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 而不是 .live()。
    • 行不通的不是定义点击发生时会发生什么的行,而是模拟点击本身的行。
    【解决方案3】:

    我必须进行 2 项更改: 一个由 nelson 建议(出于某种原因,我第一次尝试他的建议时,它破坏了现有链接),另一个是这样的: new_record.find('a.edit')[0].click()

    我在https://stackoverflow.com/a/12110482/210481找到了答案

    【讨论】:

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