sab*_*nsm 2 jquery google-apps-script
我正在使用GAS HTML服务来创建界面并尝试使用Javascript来处理客户端操作.
HTML服务和Caja不支持"this"吗?
在我的HTML文件中,我有这个:
<input type="button" name="RemoveSample_1" id="RemoveSample_1" value="Remove" onClick="removeSampleNow(this)" />
Run Code Online (Sandbox Code Playgroud)
和一个简单的Javascript函数来测试:
<script>
function removeSampleNow(thisObj) {
alert(thisObj.id);
}
</script>
Run Code Online (Sandbox Code Playgroud)
它可以在我的桌面上本地运行html但是当它在GAS中运行时.错误是"未定义".
我们不能将参数传递给函数调用吗?我们如何基于所选/单击的按钮来驱动HTML元素操作呢?
感谢您的任何帮助.
我不同意@mzimmerman,你可以使用onclick html属性(虽然Caja会操纵它).在回调函数中,您通过参数访问元素,而不是'this'.
我知道有两种工作方式.第一个是最简单的.在回调函数中,元素将是参数,而不是"this".
<html>
<head>
<script>
function onClickCallback(element){
console.log('element.id ' + element.id);
element.value = 'Clicked!';
}
</script>
</head>
<body>
<input type="button" name="b1" id="b1" value="Click me" onclick='onClickCallback(this)' />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
第二种方法使用JQuery的强大功能在运行时动态绑定回调函数,在这种情况下,回调函数通过'this'访问元素(并且不需要函数的参数).虽然第二个例子没有必要(第一个解决方案可以正常工作)但我会包含它,因为你会发现像JQuery这样的库为你提供了很多.
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
// like onload but doesn't wait for images, only the dom
$(document).ready(function() {
// bind the click handler at run time
$('#b1').click(onClickCallback);
});
function onClickCallback(){
console.log('this.id ' + this.id);
this.value = 'Clicked!';
}
</script>
</head>
<body>
<input type="button" name="b1" id="b1" value="Click me" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)