Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:Access对象';s参考变量_Javascript_Html_Dom - Fatal编程技术网

Javascript:Access对象';s参考变量

Javascript:Access对象';s参考变量,javascript,html,dom,Javascript,Html,Dom,我不确定我问的这个问题是否正确,但如何访问对象的引用变量 比如说, var datagrid = new DataBaseGrid(); console.log(datagrid); DatabaseGrid.prototype.initializeGrid = function(grid) { var self = this; console.log(self); //self references same object as datagrid grid.set

我不确定我问的这个问题是否正确,但如何访问对象的引用变量

比如说,

var datagrid = new DataBaseGrid();
console.log(datagrid);

DatabaseGrid.prototype.initializeGrid = function(grid) {

    var self = this;
    console.log(self); //self references same object as datagrid

    grid.setCellRenderer("action", new CellRenderer({ 
        render: function(cell, id) {                 
              cell.innerHTML+= "<i onclick=\""+self+".deleteRow("+id+");\" class='fa fa-trash-o' ></i>";
              console.log(cell.innerHTML);
        }
    })); 
};
相反,当单击该元素时,我得到一个错误
未捕获的SyntaxError:Unexpected identifier(index):1


我之所以要这样做,是因为我还有其他DataBaseGrid对象将使用initializeGrid,我不想硬编码对它的一个对象引用

您正在尝试将对象注入字符串。字符串表示形式可能类似于
[object DatabaseGrid]
,结果是HTML:

<i onclick="[object DatabaseGrid].deleteRow(1);" class='fa fa-trash-o'></i>

您正在尝试将对象注入字符串。字符串表示形式可能类似于
[object DatabaseGrid]
,结果是HTML:

<i onclick="[object DatabaseGrid].deleteRow(1);" class='fa fa-trash-o'></i>

您正在尝试将对象引用转换为字符串。那不行。使用其他方法之一绑定事件处理程序。
既不能使用键盘也不能使用屏幕阅读器。要修复键盘,请使其成为真正的
。要修复屏幕阅读器,除了图标外,还需要一些文本内容。一种方法是使用
aria标签
。正在修复这两个问题:
。您正在尝试将对象引用转换为字符串。那不行。使用其他方法之一绑定事件处理程序。
既不能使用键盘也不能使用屏幕阅读器。要修复键盘,请使其成为真正的
。要修复屏幕阅读器,除了图标外,还需要一些文本内容。一种方法是使用
aria标签
。解决这两个问题:
。我可以建议使用“addEventListener”而不是指定“onclick”吗?(否则,回答很好。)@迈克尔:我想知道为什么。我过去几乎在任何地方都使用
addEventListener
,但自从HTML5标准化以来,只要我只需要一个处理程序,我就可以更自如地使用*表单上的
;它更简洁,适用于非常旧的浏览器(
attachEvent
,有人吗?)。因为你永远不知道其他代码何时会临时添加/删除其他侦听器。@Michael:只要他们使用
addEventListener
/
removeEventListener
接口添加其他侦听器,
onclick
将保持工作状态。我认为
onclick
适合在该元素上的交互有一个明确的“所有者”时使用,我认为这种情况适用于这里。@user2684075:我可以理解这种混淆。我使用的
bind
实际上不是jQuery
bind
,而是。我使用它的方式有点像是
function(){self.deleteRow(id);}
;它实际做的是将
this
的值固定到
self
id
的第一个参数。我是否可以建议使用“addEventListener”而不是指定“onclick”?(否则,回答很好。)@迈克尔:我想知道为什么。我过去几乎在任何地方都使用
addEventListener
,但自从HTML5标准化以来,只要我只需要一个处理程序,我就可以更自如地使用*
表单上的
;它更简洁,适用于非常旧的浏览器(
attachEvent
,有人吗?)。因为你永远不知道其他代码何时会临时添加/删除其他侦听器。@Michael:只要他们使用
addEventListener
/
removeEventListener
接口添加其他侦听器,
onclick
将保持工作状态。我认为
onclick
适合在该元素上的交互有一个明确的“所有者”时使用,我认为这种情况适用于这里。@user2684075:我可以理解这种混淆。我使用的
bind
实际上不是jQuery
bind
,而是。我使用它的方式有点像是
function(){self.deleteRow(id);}
;它实际做的是将
this
的值固定为
self
,并将第一个参数固定为
id
var i = document.createElement('i');
i.className = 'fa fa-trash-o';
i.onclick = self.deleteRow.bind(self, id);
cell.appendChild(i);