Javascript - 免费记忆功能

时间:2015-06-11 10:52:25

标签: javascript garbage-collection

我必须说我不知道​​正确的术语,所以请原谅我的一些错误。 我有一个带行的表。表格中 last 行的最后一个可编辑列使用TabKey启用,该TabKey会自动创建一个新行。

function enableTab() {
  lastEditable = currentTable
    .find("tr")
    .find('textarea, .cleanbox-editable-cell')
    .not(function(index, element) {
        return $(element).parent().css("display") == "none";
    })
    .last();

  lastEditable.unbind("keydown");
  lastEditable.keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    createNewRow();
  };
};

function createNewRow() {
  createRow();
  enableTab();
}

创建新行时,将重新计算lastEditable变量。 我想要的是lastEditable仅与最后一行的最后一列相关联。无论如何,会发生的是创建一个新行,以及新行和前一行'当我只希望 new 行能够执行这样的功能时,最后一列提供了创建新行的功能。

因此,在我看来,会发生的是:每次创建新行时,变量 lastEditable都正确地与新行的最后一列相关联。但是之前与同一个变量相关联的对象的功能不会被删除:它根本就没有名称。

我是对的吗?如何删除对象?

我尝试了以下操作,但它没有工作:

lastEditable.keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    delete lastEditable;
    createNewRow();
};

2 个答案:

答案 0 :(得分:0)

您正在取消绑定事件处理程序,然后立即将同一事件处理程序重新应用于同一元素。您需要重新组织代码,以便在创建新行时将事件处理程序绑定到新元素http://jsfiddle.net/2fLrsjcz/

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="/">
    <xsl:for-each select="/Integration/Case/CaseEvent[(Deleted='false') and ((EventType/@Word='DLSUSFTP') or (EventType/@Word='DLREINSNON'))]">
      <xsl:sort select="substring(EventDate,7,4)" order="descending"/>
      <xsl:sort select="substring(EventDate,1,2)" order="descending"/>
      <xsl:sort select="substring(EventDate,4,2)" order="descending"/>
      <xsl:sort select="substring-after(EventTime,' ')" order="descending"/>
      <xsl:sort select="substring-before(EventTime,':')" order="descending" data-type="number"/>
      <xsl:sort select="substring-before(substring-after(EventTime,':'),' ')" order="descending" data-type="number"/>
      <xsl:if test="position() = 1">
        <xsl:apply-templates select="EventType"/>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="EventType">
    <EventType eventDate="{../EventDate}" eventTime="{../EventTime}">
      <xsl:apply-templates />
    </EventType>
  </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

要改进这篇可能对其他人有用的帖子,研究Lee的代码我已经解决了我的问题,只需将lastEditable.unbind(“keydown”)移动到.keydown(function(e){}),如下所示:

function enableTab() {
  lastEditable = currentTable
    .find("tr")
    .find('textarea, .cleanbox-editable-cell')
    .not(function(index, element) {
        return $(element).parent().css("display") == "none";
    })
    .last();

  lastEditable.keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    lastEditable.unbind("keydown");
    createNewRow();
  };
};

function createNewRow() {
  createRow();
  enableTab();
}