2012-06-12 68 views
0
设置

我有我创建通过JavaScript我一直一个onchange一个选择元件(DOM)Javascript函数的参数通过DOM

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

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

不要使用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库,如jQueryYUIClosure,或any of several others建议。这些平滑的差异像addEventListener/attachEvent这样的东西,并且还提供有用的实用功能的lot

+0

谢谢。我尝试过这种方式 - 'cell_stock_id_sel.addEventListener('change',function(){populateOtherFields(5);},false); '。然而,函数'populateOtherFields(arg){alert(arg); }'给出“未定义”而不是“5”。这就是它的全部,真的。有没有格式化? – Chinmay

+0

好吧这工作。我在函数内部创建了一个变量,将变量的值赋给了我原本想要传递的值,并且该值可以在函数中访问。非常感谢。 – Chinmay

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

谢谢。我尝试过这种方式 - 'cell_stock_id_sel.addEventListener('change',function(){populateOtherFields(5);},false); '。然而,函数'populateOtherFields(arg){alert(arg); }'给出“未定义”而不是“5”。这就是它的全部,真的。有没有格式化? – Chinmay

+0

好吧这工作。我在函数内部创建了一个变量,将变量的值赋给了我原本想要传递的值,并且该值可以在函数中访问。非常感谢。 – Chinmay

+0

不客气。 – user278064