我正在使用带有javaScript接口的WebView。如果勾选了一些复选框,我想要做的就是更改跨度的内部html。
下面是我在strings.xml中的字符串片段。表单将在onSubmit上调用此函数,如果未通过则不应继续。问题是我无法使innerHtml工作(每次都返回true)。
这有效
<script type=\"text/javascript\" language=\"javascript\">
function pass() {
return javaInterface.checkboxPass();
/*
if(passed) {
//change the instructions
document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
}
return passed;
*/
}
</script>
每次都返回true
<script type=\"text/javascript\" language=\"javascript\">
function pass() {
var passed= javaInterface.checkboxPass();
if(passed) {
//change the instructions
document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
}
return passed;
}
</script>
这是文档正文中的范围
<span id=\"txtInstructions\">%1$s</span>
我做错了什么?
答案 0 :(得分:0)
我不知道为什么代码的行为与你想要的不同,但我可以说你试图以一种过于复杂的方式来做这件事。将您的JavaScript和HTML存储在XML文件中似乎是一个真正的坏主意。我想这是合法的JavaScript,但命名一个变量与它的父函数相同似乎是错误的,一般来说你不应该使用这样的范围细微之处,除了混淆之外什么都没有。
答案 1 :(得分:0)
我仍然认为你的方法返回的东西不是严格意义上的布尔值。我会尝试做这样的事情:
<script type="text/javascript" language="javascript">
function pass() {
var passed= javaInterface.checkboxPass();
if(JSON.parse(passed)) {
//change the instructions
document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
}
return passed;
}
</script>
这将排除“boolean”被引号括起来或其他蹩脚的可能性。如果这真的是一个Java接口,它可能正在将布尔值转换为字符串。
我不认为布尔值可以作为真正的布尔值传递,特别是因为javascript和java在底层工作方式不同。你可以使用eval,但这不是好习惯,因为如果它是一个函数,它就会运行它。
IE没有解析功能,所以你必须使用它: