Javascript单例如何调用函数

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

我这里有一个单例,我试图在表单验证中使用相同的实例。我有一个包含20个onChange事件的表单,我需要使用同一个singleton实例来调用testChanges函数,如下所示。有人知道我的问题是什么吗

这是我的.js代码

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){

}