Javascript单例如何调用函数
我这里有一个单例,我试图在表单验证中使用相同的实例。我有一个包含20个onChange事件的表单,我需要使用同一个singleton实例来调用testChanges函数,如下所示。有人知道我的问题是什么吗 这是我的.js代码Javascript单例如何调用函数,javascript,singleton,Javascript,Singleton,我这里有一个单例,我试图在表单验证中使用相同的实例。我有一个包含20个onChange事件的表单,我需要使用同一个singleton实例来调用testChanges函数,如下所示。有人知道我的问题是什么吗 这是我的.js代码 var changeChecker = (function(){ var rowNum = 0; var houseId = 'house' + rowNum; var spreadTypeId = 'spreadType' + rowNum; var callPutId
var changeChecker = (function(){
var rowNum = 0;
var houseId = 'house' + rowNum;
var spreadTypeId = 'spreadType' + rowNum;
var callPutId = 'callPut' + rowNum;
var labelRowId = 'labelRow' + ( rowNum + 1 );
var labelRowNum = 3;
var instance;
return {
testChanges: function(){
spreadType = document.getElementById(spreadTypeId).options[document.getElementById(spreadTypeId).selectedIndex].text;
alert(document.getElementById(spreadTypeId).options[document.getElementById(spreadTypeId).selectedIndex].text);
if ( this.spreadType == 'Spread' )
{
rowId = document.getElementById('inputTable').rows[labelRowNum].id;
document.getElementById(rowId).style.display = 'table-row';
rowId = document.getElementById('inputTable').rows[labelRowNum + 1].id;
document.getElementById(rowId).style.display = 'table-row';
rowId = document.getElementById('inputTable').rows[labelRowNum + 3].id;
document.getElementById(rowId).style.display = 'table-row';
rowId = document.getElementById('inputTable').rows[labelRowNum + 4].id;
document.getElementById(rowId).style.display = 'table-row';
rowNum += 6;
labelRowNum += 9;
}
else if ( spreadType == 'Fly' )
{
}
else if ( spreadType == 'Straddle' )
{
}
else if ( spreadType == 'Strangle' )
{
}
else if ( spreadType == 'Tree' )
{
}
else if ( spreadType == 'Condor' )
{
}
else if ( spreadType == 'Ladder' )
{
}
else
{
}
}
}
})();
下面是我如何从20个不同的位置调用testChanges函数
<select onchange='changeChecker.testChanges();' name='spreadType[]' id='spreadType0'>
或
如果我猜对了您要做的事情-您有一个包含20行的表,每行中有一个select标记,您要向其附加一个onchange事件 在您的代码示例中,checker函数是一个闭包的一部分,其中spreadTypeId也是一个成员。现在,让这个变量成为这个闭包的私有成员,让创建这个闭包的函数只执行一次——它的值始终是spreadType0 如果确实是这样,您应该允许将rowNum作为参数传递给check函数:
testChanges: function(rowNum){
//...
}
这样,你的20个选择中的每一个都会写为
<select onchange='changeChecker.testChanges(0);' name='spreadType[]' id='spreadType0'>
<select onchange='changeChecker.testChanges(1);' name='spreadType[]' id='spreadType1'>
<select onchange='changeChecker.testChanges(2);' name='spreadType[]' id='spreadType2'>
一直到
<select onchange='changeChecker.testChanges(20);' name='spreadType[]' id='spreadType20'>
另请注意,您为select标记指定的名称也有问题:
input/textarea/select标记的name属性是服务器上显示的字段名称,在服务器上具有相同名称的元素无论如何都会被理解为数组,因此[]完全冗余-如果没有问题的话。主要问题是您有一个调试变量
var rowNum = 0
应该是
function(rowNum){
}
您在行号中硬编码。并且没有将参数添加到php中的函数中
ie changeChecker.testChange$i我尝试了上述更改,但仍然存在相同的问题。没有调用changeChecker.testChanges0或其他任何名称。在.js文件中包含javascript,在php文件中包含html,这是一个问题吗?我在文档开头引用了.js文件。不,没关系。关于这个问题你能说得更具体些吗?当您说调用检查器时,是因为出现了警报吗?你想从这个检查器中得到什么效果?是的。伟大的重复我说的话:
function(rowNum){
}