我已将一个函数挂钩到多个控件的同一事件:
element.onchange = SetSelected;
在SetSelected
我需要知道哪个元素叫我。我犯了一个错误,试图做到以下几点:
element.onchange = SetSelected(element.id);
当然会调用不是我想要的功能。
我想也许this
关键字可以提供我想要的但是它没有(在SetSelected函数中)。
var element = this;
我没有使用jquery,并且不想为这样一个简单的任务添加依赖项。
对于那些在这里提出要求的人来说就是完整的例子:
var imageNumber = 12;
var elementId = "cphContent_rdoSelected";
window.onload = function () {
for (var i = 1; i <= imageNumber; i++) {
var element = document.getElementById(elementId + i.toString());
//select the first element by default
if (i === 1) {
SetSelected(element.id);
}
element.onchange = SetSelected;
}
};
function SetSelected() {
for (var i = 1; i <= imageNumber; i++) {
var radioButton = this;//document.getElementById(elementId + i.toString());
var lbl = document.getElementById("lbl" + i.toString());
if ( id === radioButton.id) {
if (!radioButton.hasAttribute("checked")) {
radioButton.setAttribute("checked","");
lbl.style.display = "block";
}
}
else {
if (radioButton.hasAttribute("checked")) {
radioButton.removeAttribute("checked");
}
lbl.style.display = "none";
}
}
};
答案 0 :(得分:1)
如果您执行this
,则使用element.onchange = SetSelected;
将有效。但是,您的问题似乎与
if (i === 1) {
SetSelected(element.id);
}
这不起作用,因为this
不会引用该元素,它会引用window
。您必须通过this
或.call
明确设置.apply
:
if (i === 1) {
SetSelected.call(element);
}
了解this
的来源:
答案 1 :(得分:0)
尝试使用
element.onchange = function() { SetSelected(element.id); };
答案 2 :(得分:0)
答案 3 :(得分:0)
我想你可以试试这个...... 但是,它完全重写了你拥有的东西。
var elementId = "cphContent_rdoSelected";
var elements;
function Window_OnLoad( event ) {
elements = document.querySelectorAll( "input[id^='" + elementId + "']" );
elements[0].setAttribute( "checked", "" );
document.getElementbyId( elements[0].id.replace( elementId, "lbl" ) ).style.display = "block";
for( var i = 0, len = elements.length; len > i; ++i ) {
elements[0].addEventListener( "change", Radio_OnChange, false );
}
}
function Radio_OnChange( event ) {
var element = ( event.target )? event.target: event.srcElement;
for( var i = 0, len = elements.length; len > i; ++i ) {
elements[i].removeAttribute( "checked" );
document.getElementbyId( elements[i].id.replace( elementId, "lbl" ) ).style.display = "none";
}
element.setAttribute( "checked", "" );
document.getElementbyId( element.id.replace( elementId, "lbl" ) ).style.display = "none";
}
window.addEventListener( "load", Window_OnLoad, false );