通过DOM设置Javascript函数参数

时间:2012-06-12 10:18:44

标签: javascript html dom

我有一个我正在通过javascript(DOM)创建的select元素

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

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

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

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

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

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

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

那么有没有办法可以传递这个“模式”,这实际上是迭代(行数,行号)的数字。

select__1, text__1, text2__1
select__2, text__2, text2__2

需要传递“__1”和“__2”。而且它们不是静态模式。可以是任何数字。

2 个答案:

答案 0 :(得分: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);

这是the standard,但在旧版本的IE上不存在。

attachEvent

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

这只是IE浏览器(呃,大多数情况下,某些浏览器会向只有IE的站点抛出骨头)。这是微软的预标准方式。在标准模式下的IE8及更高版本中,您可以使用addEventListener代替。

这些方法的全部的另一个优点是你不必拥有任何全局函数,而setAttribute方式,如果你使用函数名,那么函数必须全球化。浏览器上的全局命名空间已经真的拥挤,我总是建议避免添加杂乱。


由于浏览器之间的各种变幻莫测,我倾向于建议使用任何体面的JavaScript浏览器库,例如jQueryYUIClosureany of several others。这些平滑的差异就像addEventListener / attachEvent之类的东西一样,也提供了很多的有用实用功能。

答案 1 :(得分:1)

cell_stock_id_sel.addEventListener("onchange", function() {
    populateOtherField(arguments);
});