JSF <h:commandLink> アクションが実行される前に Javascript を実行するにはどうすればよいですか?[重複]

StackOverflow https://stackoverflow.com/questions/73628

  •  09-06-2019
  •  | 
  •  

質問

この質問にはすでに答えがあります:

JSFをお持ちの場合 <h:commandLink> (これは onclick のイベント <a> 現在のフォームを送信する場合)、アクションが実行される前に JavaScript (削除の確認を求めるなど) をどのように実行しますか?

役に立ちましたか?

解決 2

<h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}">
    <h:outputText value="#{msgs.deleteText}" />
</h:commandLink>
<script type="text/javascript">
if (document.getElementById) {
    var commandLink = document.getElementById('<c:out value="${myPageCode.myCommandLinkClientId}" />');
    if (commandLink && commandLink.onclick) {
        var commandLinkOnclick = commandLink.onclick;
        commandLink.onclick = function() {
            var result = confirm('Do you really want to <c:out value="${msgs.deleteText}" />?');
            if (result) {
                return commandLinkOnclick();
            }
            return false;
        }
    }
}
</script>

他の Javascript アクション (フォーム入力の検証など) は、呼び出しを次のように置き換えることによって実行できます。 confirm() 別の関数の呼び出しを使用します。

他のヒント

このように簡略化できます

onclick="return confirm('Are you sure?');"

これは私にとってはうまくいきました:

<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"  
                                             id="newibutton" 
                                             onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;" 
                                             value="#{bundle.NewPatient}"/>

引き続き onclick を使用できます。JSF レンダーキットの仕様 (「エンコード動作」を参照) リンクがそれをどのように処理するかを説明します。重要な部分 (onclick でレンダリングされる内容) は次のとおりです。

var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();

そのため、関数にはイベント オブジェクトが渡されませんが (ブラウザ間で信頼性がありません)、true/false を返すと送信がショートします。

JSF 1.2 では、onclick イベントを指定できます。

また、次のような他のライブラリもあります。 マイフェイス または アイスフェイス 「onclick」ハンドラーを実装します。

その場合に行う必要があるのは次のとおりです。

<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />

注記:ただできない return confirm(...) これにより、onClick イベント内の残りの JavaScript の実行がブロックされ、ユーザーが何を返したとしてもアクションの実行が実質的に停止されます。

フォームが投稿される前に確認などのために何かを実行したい場合は、フォーム イベント onSubmit を試してください。何かのようなもの:

myform.onsubmit = function(){confirm("really really sure?")};

これは私には決してうまくいきませんでしたが、

 onclick="if(confirm('Are you sure?')) return false;" />

しかし、これはそうでした

onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
var deleteClick;
var mess="xxx";
function assignDeleteClick(link) {
    if (link.onclick == confirmDelete) {
        return;
    }
    deleteClick = link.onclick;
    link.onclick = confirmDelete;
}


function confirmDelete() {
    var ans = confirm(mess);
    if (ans == true) {
        return deleteClick();
    } else {
        return false;
    }
} 

jsf 1.1 にはこのコードを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top