我有一个我正在通过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”。而且它们不是静态模式。可以是任何数字。
答案 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浏览器库,例如jQuery,YUI,Closure或any of several others。这些平滑的差异就像addEventListener
/ attachEvent
之类的东西一样,也提供了很多的有用实用功能。
答案 1 :(得分:1)
cell_stock_id_sel.addEventListener("onchange", function() {
populateOtherField(arguments);
});