使用jQuery抓取apex:commandButton

时间:2012-03-23 20:24:23

标签: javascript jquery-selectors salesforce visualforce force.com

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

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

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

在我的文件中。我已经有了这样的陈述:

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">

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

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

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

停用

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

重新启用

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

答案 1 :(得分:1)

Micah,你的基本问题是你正在使用.value和jQuery对象---这是返回undefined,因为.value不是jQuery对象的属性。使用.val()。

你的“ends-with”选择器方法运行正常,是迄今为止一直通过Id检索Visualforce元素的最简单方法---所以不要在这里改变任何东西。

另外,如果你试图在JavaScript中操作这个按钮,我建议你不要使用CommandButton。你可以使用常规输入按钮实现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>

答案 2 :(得分:0)

alert('button value ' + $("#j_id0\\:frm\\:searchBlock\\:saveButton").val());

要禁用:

$("#j_id0\\:frm\\:searchBlock\\:saveButton").attr("disabled", "");