6

liferay ポートレットで AlloyUI を使用しています。

<input>の id を JavaScript で使用したいと考えています。問題は、要素の id がクライアント側で変更されることです。

例:の ID を「ユーザー名」
に設定すると、 IDに追加されます。ここで、ポートレット名です。<input>_hospital_WAR_hospitalportlet_userName_hospital_WAR_hospitalportlet_Hospital

jqueryで使用できるようにクライアント側のIDを取得するにはどうすればよいですか?

4

2 に答える 2

8

_hospital_WAR_hospitalportlet_の先頭に追加された文字列Id<input>、ポートレットの名前空間に他なりません。

タグを使用する場合、これは<input>name&id属性の先頭に追加されるだけであり、 plain-vanilla htmlタグのみを使用する場合、 &属性は変更されません。<aui:input>nameid<input>

ただし、使用<aui:input>することをお勧めします。次のようにして、JavaScript コードでポートレットの名前空間を取得できます。

  1. JSP 内で JavaScript を使用している場合、つまり within<script> .. </script>またはを使用している場合は、またはを使用して JavaScript 内の文字列を取得<aui:script> .. </aui:script>できます。<portlet:namespace /><%= renderResponse.getNamespace() %>_hospital_WAR_hospitalportlet_

    jQuery("#<portlet:namespace />username").val();
    
    // Or
    
    jQuery("#<%= renderResponse.getNamespace() %>username").val();
    
  2. ただし、ファイルを使用している場合は、名前空間を引数としてファイル*.js内の javascript 関数に渡すことをお勧めします。js

    function changeValues(portletNamespace) { // this function is in a js file
        jQuery("#" + portletNamespace + "username").val("Lets change");
    }
    

    JSP からこの関数を呼び出します。

    <input type="button" onClick="changeValues('<portlet:namespace />')" />
    

お役に立てれば。Liferay によって定義された JavaScript 関数を介してnamespaceorを直接取得する方法があるかどうかはわかりません。portletIdそのようなものを取得した場合は、ここに投稿できます。これは非常に役立ちます。

于 2012-12-11T07:31:56.977 に答える
4

これを試して:

Liferay.Portlet.ready(

    /*
    This function gets loaded after each and every portlet on the page.

    portletId: the current portlet's id
    node: the Alloy Node object of the current portlet
    */

    function(portletId, node) {
    }
);
于 2013-10-20T19:04:12.093 に答える