2013-02-19 83 views
0

我在其中一个插件中创建了一个事件处理机制。我触发了一个事件,并希望将一个特定的项目发送回事件处理程序参数。在javascript中通过引用传递和修改变量

内,事件处理程序,我想改变也应该改变它的插件内的项目。下面我有一个简单的版本。

datafile.js

var data = { 
    'Project': [ 
     { 
      'StartDate': '02/20/2013', 
      'EndDate': '03/30/2013', 
      'Description': 'Description 1', 
      'ProjectID': 'ID1' 
     }, 
     { 
      'StartDate': '02/20/2013', 
      'EndDate': '03/30/2013', 
      'Description': 'Description 2', 
      'ProjectID': 'ID2' 
     } 
] 
}; 

function onbuttonClick() { 
    onClickInternal(data.Project[1].Description); 
}; 

主要的index.html

<head> 
    <script src="datafile.js"></script> 
    <script type="text/javascript"> 
     function onClickInternal(description) { 
      description = "This is the new description"; 
      document.getElementById("mydiv").innerHTML = data.Project[1].Description; 
     }; 
    </script> 
</head> 

<body> 
    <div id="mydiv"> </div> 
    <input type="button" onclick="onbuttonClick()" value="Project"/> 
</body> 

它不会让任何意义,如果我通过了整个data对象或Project数组作为事件处理PARAM因为我想通过一个特定的Description项目并对其进行修改,以使其在data阵列中也得到修改。这是如何在JavaScript中完成的?

回答

0

你可以设置只有arrayPos你onClickInternal:

function onbuttonClick() { 
    onClickInternal(1); 
}; 

function onClickInternal(projectPos) { 
    data.Project[projectPos].Description = "This is the new description"; 
    document.getElementById("mydiv").innerHTML = data.Project[projectPos].Description; 
}; 

或使用回调方法

function onbuttonClick() { 
     onClickInternal(data.Project[1].Description, function(newDescription) { 
      data.Project[1].Description = newDescription; 
      return newDescription; 
     }); 
    }; 


    function onClickInternal(description, setNewValue) { 
     document.getElementById("mydiv").innerHTML = setNewValue("This is the new description"); 
    }; 
+0

啊! 'data'在我的插件中不会是全局的。当我在上面的文本代码中输入代码时,从我的脑海中滑落。所以如果'data'不是全局的,那么可以修改第一种方法? – user1240679 2013-02-19 07:32:13

+0

问这个,因为当我触发事件,我感到像'dataPlugin.events.trigger(这一点,“groupselect”,this.itemSelected.index)传递PARAMS;' – user1240679 2013-02-19 07:35:16