我正在尝试使用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">
有什么建议吗?
答案 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", "");