首先,我阅读了所有听起来有点相关的建议问题,但没有找到任何解决我问题的东西。其次,如果这已经在某个地方得到解决,我没有很好地搜索它。最后,直奔问题。: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 对象上的一些方法是ShowOptions
、HideOptions
、BindOptions
。
至于点击按钮时调用的代码,这里是:
function AddLineItem()
{
var lineItemsParent = $("lineItems");
var newRow = lineItemTemplateNode.cloneNode(true);
lineItemsParent.appendChild(newRow);
}
所以,总而言之,行项目 HTML 包含通常的东西:输入、选择、跨度等,然后是上面列出的 JS 声明。由于我添加新行项目的方式(使用上面的代码),JS 变量也被克隆。而且我需要一种方法来 1)更改元素的 ID 和 2)跟踪所有 JS 引用(已经建议使用数组)。