0

首先,我阅读了所有听起来有点相关的建议问题,但没有找到任何解决我问题的东西。其次,如果这已经在某个地方得到解决,我没有很好地搜索它。最后,直奔问题。:D

我有一个页面上有一个“行项目”。就我们的目的而言,“行项目”只是水平行中的一堆 HTML 元素,它们形成一行 HTML 输入(例如,想象诸如 Pieces、Description、Weight、Unit Rate、Total Rate 等列)。我们订单项中的一个 HTML 控件实际上是一个自定义服务器控件,它发出一些 Javascript。除其他外,Javascript 更新了一个 X 类型的对象,如下所示:

var whatever = new X(constructor values);

现在,用户可以使用添加按钮添加行项目。目前,我只是克隆构成订单项的 HTML 的干净副本。这也克隆了 Javascript 代码,因此现在每个行项目都有var whatever = new X(constructor values);. 这带来了一个问题,因为有几行都引用了相同的 Javascript 变量(即whatever)。

当然,这会破坏所有 b/c 我需要将每个whatever's 引用为单独的实例,而不是同一个实例。我想知道是否有处理这种情况的方法。如何使用自定义服务器控件但仍引用每行发出的 Javascript?或者如何以避免此问题的方式创建新订单项?

我是整个修改 DOM 使用 Javascript 领域的新手,我似乎找不到任何有用的最佳实践或示例,所以我有点不知所措。

这一切有意义吗?如果没有,请让我知道什么不是,我会尽力清理它。

编辑: 这是一个小代码示例。

这正是 JavaScript 对象声明的样子:

var example = new SmartDropDown('uomSDD','75','1','7','','','','',2);

第一个参数是呈现的元素之一的 HTML ID,因此我不能使用数组(如其中一个答案中所述;很棒的答案,但是,直到我意识到我忘记提及那个细节)。我需要想出一种方法来更改 ID使用数组。

SmartDropDown 对象上的一些方法是ShowOptionsHideOptionsBindOptions

至于点击按钮时调用的代码,这里是:

function AddLineItem()
{
    var lineItemsParent = $("lineItems");
    var newRow = lineItemTemplateNode.cloneNode(true);
    lineItemsParent.appendChild(newRow);
}

所以,总而言之,行项目 HTML 包含通常的东西:输入、选择、跨度等,然后是上面列出的 JS 声明。由于我添加新行项目的方式(使用上面的代码),JS 变量也被克隆。而且我需要一种方法来 1)更改元素的 ID 和 2)跟踪所有 JS 引用(已经建议使用数组)。

4

3 回答 3

2

使用数组?

   var lineItems = [];
   ...
   // when the button is clicked
   lineItems[lineItems.length] = new X(constructor values); 

如果您需要同时生成一个新的 id,您可以在数组索引前添加一个字符串。

   var lineItems = [];
   ...
   // when the button is clicked
   var id = 'item_' + lineItems.length.toString()
   lineItems[lineItems.length] = new X(id, ...); 
于 2009-06-02T21:15:57.683 回答
1

这就是 JavaScript 框架真正派上用场的地方。许多人都有很好的构造函数,使这种类型的事情变得容易。例如,使用Prototype,我可以这样做:

function buildMe(counter) {
    var tempHTML = new Element('div',{'id':'bleh'+counter,className:'product'})
    tempHTML.insert(new Element('a',{className:'prodTitleLinkA',href:'/here'})

    $('someDiv').insert(tempHTML)
    Event.observe('bleh'+count, 'click', function(event) {
       alert(element.id)
    });
}

这会创建一些元素,并将事件与它们联系起来。我可以尽可能多地向“someDiv”中推入,每个都有自己的 ID 和事件。

于 2009-06-02T21:15:29.043 回答
0

我想我需要更多的信息才能给你一个很好的答案。您能否展示一些示例代码如何调用您的此功能,分配给var 的内容以及您想要/可以提供的其他信息。越多越好!

如果可以的话,我很乐意提供帮助。

于 2009-06-02T21:14:59.870 回答