0

我有一个通过 javascript (DOM) 创建的选择元素

var cell_stock_id = row.insertCell(0);
var cell_stock_id_sel = document.createElement('select');

我为此保留了一个 onchange javascript 函数-

cell_stock_id_sel.setAttribute("onchange","populateOtherFields");

当我在选择中更改所选选项时,该函数被调用。

有没有办法可以将参数传递给这个函数“populateOtherFields”?

我在表格行中有一个选择框和很多文本字段。我想根据选择填充这些行。我能够访问必须在这些字段中插入的数据,但我不知道如何在该行的这些文本字段中输入数据。我正在考虑传递一个唯一编号,该编号将与行中元素的名称标识,并且 javascript 将在行中元素的名称中解析该模式。

 document.forms["0"].elements[i].name.indexOf("pattern"). 

那么有没有一种方法可以让我传递这个“模式”,它本质上是迭代(行数,行数)数。

select__1, text__1, text2__1
select__2, text__2, text2__2

'__1' 和 '__2' 需要通过。而且它们不是静态模式。可以是任何数字。

4

2 回答 2

4

不要setAttribute用于设置事件处理程序,使用直接分配或(更好)addEventListener/attachEvent然后您可以创建一个函数,该函数将使用所需的参数调用您的函数。(当然,无论如何你都可以这样做,但是使用setAttribute你要么必须内联,要么创建另一个全局命名函数。)

直接赋值:

cell_stock_id_sel.onchange = function() {
    populateOtherFields(arguments, here);
};

适用于所有浏览器,但您只能change在使用此方法的元素上拥有一个处理程序(如setAttribute)。

addEventListener

cell_stock_id_sel.addEventListener('change', function() {
    populateOtherFields(arguments, here);
}, false);

这是标准,但在旧版本的 IE 上不存在。

attachEvent

cell_stock_id_sel.attachEvent('onchange', function() {
    populateOtherFields(arguments, here);
});

这是仅限 IE 的(呃,大多数情况下,一些浏览器会对仅限 IE 的站点产生影响)。这是微软的预标准方式。在标准模式下的 IE8 及以上版本中,您可以addEventListener改用。

所有这些方法的另一个优点是您不必拥有任何全局函数,而setAttribute如果您使用函数名称,则该函数必须是全局的。浏览器上的全局命名空间已经非常拥挤,我总是建议避免添加混乱。


由于浏览器之间的各种变幻莫测,我倾向于推荐使用任何体面的 JavaScript 浏览器库,例如jQueryYUIClosure其他任何一种。这些平滑了addEventListener/之类的差异,attachEvent并且还提供了许多有用的实用程序功能。

于 2012-06-12T10:21:29.820 回答
1
cell_stock_id_sel.addEventListener("onchange", function() {
    populateOtherField(arguments);
});
于 2012-06-12T10:21:54.773 回答