1

我正在尝试使用 jQuery 获取视觉力元素并且遇到了一些麻烦。

在我的源代码中,我的保存按钮如下所示:

<apex:commandButton id="saveButton" value="Save"/>

在我的 document.ready 中,我有这样的声明:

alert('button value ' + $("[id$=saveButton]").value);

但是当我加载页面时,我得到的只是:

'按钮值未定义'。

最终,我想从 JavaScript 函数中以编程方式禁用该按钮,但我认为我什至无法抓取该元素。

chrome 检查员说我的元素如下所示:

<input id="j_id0:frm:searchBlock:saveButton" type="submit" name="j_id0:frm:searchBlock:saveButton" value="Save" onclick="saveButtonClicked();" class="btn" disabled="disabled">

有什么建议么?

4

3 回答 3

2

使用 jQuery 时,请使用$("selector").val();not $("selector").value;$("selector").value;将是未定义的。

在您的情况下,请使用:$("[id$=saveButton]").val();

禁用

$("[id$=saveButton]")
    .attr("disabled", "disabled")
    .removeClass("btn")
    .addClass("btnDisabled");

重新启用:

$("[id$=saveButton]")
    .removeAttr("disabled")
    .removeClass("btnDisabled")
    .addClass("btn");
于 2012-03-23T21:21:22.840 回答
1

Micah,您的基本问题是您将 .value 与 jQuery 对象一起使用——这将返回 undefined 因为 .value 不是 jQuery 对象的属性。使用 .val()。

您的“ends-with”选择器方法工作正常,并且是迄今为止通过 Id 始终如一地检索 Visualforce 元素的最简单方法 --- 所以不要在此处更改任何内容。

附带说明一下,如果您尝试从 JavaScript 中操作此按钮,我建议不要使用命令按钮。您可以使用 CommandButton 实现的任何操作都可以通过常规输入按钮实现,就像这样,然后您不必担心 (1) 会弄乱标准 Visualforce 元素,这些元素通常包裹在多层 DIV 中 (2)重新渲染问题。例如,如果您想在调用 Apex 操作(无论是标准的还是自定义的)之前执行一些 JavaScript,并且仍然让您的“命令按钮”显示在 pageBlockButtons 中,请执行以下操作:

<apex:pageBlockButtons>
    <input type="button" class="btn" id="mySaveButton" 
        onclick="saveButtonClicked();" value="Save"/>
</apex:pageBlockButtons>

这将呈现一个看起来完全像 CommandButton 的按钮,而且您可以在 jQuery 中轻松访问/禁用它:

<script>
var $j = jQuery.noConflict();

// To disable the button programmatically
// (in jQuery 1.7+) on page load:
$j(document).ready(function(){
    $j('#mySaveButton').prop('disabled',true);
});
</script>
于 2012-03-23T21:06:09.090 回答
0
alert('button value ' + $("#j_id0\\:frm\\:searchBlock\\:saveButton").val());

要禁用:

$("#j_id0\\:frm\\:searchBlock\\:saveButton").attr("disabled", "");
于 2012-03-23T20:50:35.580 回答