1

私はjQueryを使ってビジュアルフォース要素を取得しようとしています。grabbing apex:jQueryを使ったcommandButton

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

そして、私のdocument.readyに、私はこの文を持っている:

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

しかし、私はページをロードするときに私が得るすべては次のとおりです。私のソースで

は、ボタンは次のようになり、保存マイ

'ボタン値は未定義です'。

最終的に、JavaScript関数内からプログラムでボタンを無効にしたいと思いますが、私は要素をつかむことさえできません。

クロム検査官は私の要素は次のようになります。こう述べています。

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

任意の提案ですか?

+0

ウィッシュ)。 – micahhoover

+1

問題は、あなたが.value ---- useを使用していることです.val() – zachelrath

答えて

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

は無効にするには:

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

これはとても面白いです!なぜあなたのソリューションは機能しますか? – micahhoover

+0

コロンをエスケープすることを含め、完全なIDを使用する必要があります: 'j_id0 \\:frm \\:searchBlock \\:saveButton' –

+2

あなたのセレクタはうまく動作するはずです。問題は.valueです。これはjQueryオブジェクトのプロパティではありません.Jeremyのようにval()を使用する必要があります。 – zachelrath

1

ミカ、あなたの基本的な問題は、jQueryののプロパティ.VALUEではありませんので、あなたが、これは未定義返す--- jQueryオブジェクトで.VALUE使用しているということですオブジェクト。 .val()を使用します。

"ends-with"セレクタメソッドはうまくいきます.IdによってVisualforce要素を一貫して取得する最も簡単な方法です。ここで何も変更しないでください。

JavaScriptでこのボタンを操作しようとしている場合は、CommandButtonを使用しないことをお勧めします。通常の入力ボタンで実現できるCommandButtonで実現できるものは何でもあり、DIVのいくつかのレイヤーで包まれることが多い標準Visualforce要素(2)を心配する必要はありません(1)再発行の問題。たとえば、あなたが前(標準またはカスタムかどうか)のApexアクションを呼び出すには、いくつかのJavaScriptを行うには、まだあなたの「コマンドボタン」はpageBlockButtonsに表示してい、これをしたい場合:

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

これは、レンダリングしますEXACTLYコマンドボタンのように見える、プラスあなたは簡単にjQueryでそれを無効にする/アクセスできるボタン: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> 
+0

通常の入力ボタンを使用するかどうかは不思議でしたが、もっと簡単に思えますが、非コマンドbから同じ頂点コントローラメソッドを呼び出すutton(esp JavaScriptのリモーティングは関数が静的である必要があるようです)...しかし、それが正しいかどうかはわかりません。いずれにせよ、ここの洞察に感謝します! VFについて学ぶために多くを得ました。 – micahhoover

2

$("selector").val();ない$("selector").value;を使用しています。 $("selector").value;は未定義です。

あなたの場合、$("[id$=saveButton]").val();を使用してください。再度有効

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

:無効

提案された解決策は、(下記)で動作し、私が試し1は、特定のボタンに(失敗した理由を私は知っていた

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

まだこのアプローチを使用するかどうか、または以下のZachelrathを使用するかどうかを決定しようとしています。どんな場合でも正しいですが、私はそれが動作することを確認しました! – micahhoover

関連する問題