0

当我尝试将参数从 JSF 传递到 Javascript 时出现错误,我的参数为空。

JSF 代码:

<h:commandButton immediate="true" value="#{bundle.hello}" 
                            onclick="return test('#{myBean.parameter1}', '#{myBean.parameter2}');"/>

Javascript代码:

function test(parameter, parameter2){
    html2canvas($('#body'), {
        onrendered: function (canvas) {
            var img = canvas.toDataURL("image/png");
            var newImg = window.open(img);
            newImg.document.write("<title>" + parameter+ " - " + parameter2+ "</title>");
        }
    });
    return false;
}

我发现有些奇怪,如果我在我的函数中删除“return false”,参数就可以了。不幸的是,由于其他原因,我需要“return false”。

你能解释一下我必须如何解决它吗?

谢谢你。

4

1 回答 1

0

EL(那些#{}东西)在生成 HTML 输出期间运行,而不是在执行 JavaScript 代码期间运行。在浏览器中右键单击并查看源代码。你会看到的

onclick="return test('', '');"

当 onclick 被触发时,该test()函数显然是用空参数调用的。我绝对没有看到如何更改函数的返回值来true解决这个问题。很可能您错误地识别了问题,并且当按钮被按下两次而不是一次时,问题才被“修复”。

你需要以不同的方式解决这个问题。一种方法是让 JS 直接获取 HTML 输入元素的值。例如

<h:form id="form">
    <h:inputText id="input1" ... />
    <h:inputText id="input2" ... />
    <h:commandButton ... onclick="test(); return false;" />
</h:form>

function test() {
    var input1 = document.getElementById("form:input1").value;
    var input2 = document.getElementById("form:input2").value;
    // ...
}
于 2013-10-31T13:10:17.693 回答