0

t:dataTable の選択した行に基づいてボタンを無効にする必要があります。これは、行選択イベントで呼び出している JavaScript メソッドです (選択した行のアイテムにツールチップがある場合、ボタンを無効にする必要があります... 見苦しいですが、これが最も簡単な方法でした)。

function processUpdateButton() {
if (!$(".selectedRow").length
    || $(".selectedRow").children().find(".tooltip").length){
    $(".Update").button({disabled:true});
} else {
    $(".Update").button({disabled:false});
};
}

これは JSF コマンドリンクです。

<h:commandLink id="update" styleClass="Update iconButton"
             action="#{myBB.update}"
             value="#{gui['button.update']}"
             tabindex="301"/>

ボタンに無効な属性を設定すると機能します。ボタンがグレー表示され、その上にマウスを置いても、他のリンクのようにカーソルが変化しません。問題は、まだクリックでき、バッキング Bean のメソッドが呼び出されることです。それを防ぐ方法はありますか?レンダリングされた無効化されたボタンは次のとおりです。

<a id="mainForm:update" 
    class="iconButton ... ui-button-disabled ui-state-disabled"
    onclick="return myfaces.oam.submitForm('mainForm','mainForm:update');" 
    href="#" role="button" aria-disabled="true" disabled="disabled">
      <span class="ui-button-text">Update</span>
</a>

おそらく onClick 属性を削除する必要がありますが、再度有効にする方法がわかりません。

もちろん、更新ボタンをクリックしてサーバーの状態を確認することもできますが、それは最後の手段です。サーバーを呼び出さずに、JavaScriptのみからJSFによって生成されたボタンを完全に無効にできればいいのですが。

4

2 に答える 2

1

だから私は解決策を見つけました。ボタンを無効にするときに onclick 属性を別の属性にコピーし、その逆も行いました。

var onclick;
if (!$(".selectedRow").length
    || $(".selectedRow").children().find(".tooltip").length){
    $(".Update").button({disabled:true});
    onclick=$(".Update").attr('onclick');
    $(".Update").attr('onclick2',onclick);
    $(".Update").removeAttr('onclick');
} else {
    $(".Update").button({disabled:false});
    onclick=$(".Update").attr('onclick2');
    $(".Update").attr('onclick',onclick);
    $(".Update").removeAttr('onclick2');
};
于 2013-08-09T14:14:59.783 に答える
0

ご覧のとおり、生成された html コードはボタンではなくハイパーリンクです。したがって、リンクタグからリンクを削除する必要があります。以下を試すことができます:

$(".Update").removeAttr('href');
于 2013-08-09T13:31:44.620 に答える