代码之家  ›  专栏  ›  技术社区  ›  Jason

令人兴奋的jQuery怪事

  •  2
  • Jason  · 技术社区  · 16 年前

    …至少对我来说。此代码 好好工作。我很确定什么都没变,但现在突然之间它的行为很奇怪。基本上,我正在尝试创建内联编辑功能。当用户单击链接时,它会动态生成一个文本框和一个确认和取消链接。“取消”链接没有删除单元格中的所有内容,我遇到了问题。

    HTML格式:

    ...
    <td class="bid">
       <a href="javascript:" class="102093" title="Click to modify bid">$0.45</a>
    </td>
    ...
    

    绑定jQuery(在 $(function())

    $('.bid a').live('click', renderBidChange);
    ....
    $('.report_table .cancel').live('click', cancelUpdate); 
    

    renderBidChange (此函数创建动态元素):

    function renderBidChange(){
        var cpc = $(this);
        var value = cpc.text().replace('$', '');
        var cell = cpc.parent('.bid');
        cpc.hide();
    
        var input = document.createElement('input');
        $(input).attr({type:'text',class:'dynamic cpc-input'}).val(value);
        cell.append(input);
    
        var accept = document.createElement('a');
        $(accept).addClass('accept').attr({'href':'javascript:',
          'title':'Accept Changes'}).text('Accept Changes');
        cell.append(accept);
    
        var cancel = document.createElement('a');
        $(cancel).addClass('cancel').attr({'href':'javascript:',
          'title':'Cancel Changes'}).text('Cancel Changes');
        cell.append(cancel);
    
        $(input).focus();
        input.select();
    }
    

    cancelUpdate 此函数只是删除单元格中所有可见的内容(本例中为所有动态垃圾),并显示以前的内容。

    function cancelUpdate(){
        var cell = $(this).parent();
        cell.find(':visible').remove();
        cell.find(':hidden').show();
    }
    

    但是,由于某些原因,单击“取消”链接后仍会保留该链接!除此之外,其他一切都被删除了。W T F公司

    感谢您提供的任何见解!我肯定这只是一些愚蠢的小细节,我在[咖啡]看。。。

    更新 在发布这篇文章之后,我立刻意识到这可能是一个CSS问题,但是在仔细检查了我的代码之后,它不是。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Nick Craver    16 年前

    你需要稍微调整一下:

    $('.bid a:not(.cancel)').live('click', renderBidChange);
    

    自从你搬到 .live()

        2
  •  0
  •   jcolebrand    16 年前

    如果你改变了会发生什么:

    $('.report_table .cancel').live('click', cancelUpdate); 
    

    $('.bid .cancel').live('click', cancelUpdate);