2012-07-19 12 views
11

Próbuję czegoś prostego, tylko po to, aby uzyskać wartość tekstową wewnątrz skryptu JavaScript p:inputText, ale ja tego nie dostaję. Być może jest to inna procedura z PrimFaces, ponieważ jeśli nie używam tego, nie napotykam problemu.Pobierz tekst wartości z p: inputText javascript

Mój kod:

<p:inputText value="any text" widgetVar="youtlink" ></p:inputText> 
     <p:commandButton value="Search" onclick="loadPlayer();" icon="ui-icon-search" /> 


<script type="text/javascript"> 
    function loadPlayer() { 
     alert(youtlink.text); 
    } 
</script> 

Próbowałem również z JQuery, ale również bez powodzenia.

Przedstawiane widok:

<form id="editlFrm" enctype="application/x-www-form-urlencoded" method="post" 
name="editlFrm"> 
    <input id="editlFrm:j_id_7" class="ui-inputfield ui-inputtext ui-widget ui-state-default ui-corner-all" 
    type="text" value="assd" name="editlFrm:j_id_7" role="textbox" aria-disabled="false" 
    aria-readonly="false" aria-multiline="false"> 
    <button id="editlFrm:j_id_8" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left" 
    type="submit" onclick="loadPlayer();;PrimeFaces.ab({source:'editlFrm:j_id_8'});return false;" 
    name="editlFrm:j_id_8" role="button" aria-disabled="false"> 
+0

Twoje pytanie zostało również 'tag jQuery', chcesz rozwiązanie w nim też? – Blaster

+0

'jQuery' działa z renderowanym kodem HTML, więc umieszczenie twojego szablonu/serwera po prostu nie pomaga. Opublikuj część renderowanego źródła. –

+0

Odpowiedz

12

Dodaj id do listy <p:inputText

jak ten

<p:inputText id="someID" value="any text" widgetVar="youtlink" ></p:inputText> 

upewnić się, że forma dostał prependId="false"

niż dostęp do wartości jak ten

alert(jQuery('#someID').val()); 

jeśli nie chcesz, aby dodać prependId="false" do formularza trzeba będzie zmienić selektor jquery od jQuery('#someID').val() do jQuery("[id$='someID']").val()


EDIT

od Twojego formularza o nazwie editlFrm

spróbować (upewnij się, aby przypisać someID id do swojej p:inputText)

alert(jQuery('#editlFrm\\:someID').val()); 
+1

Próbowałem, to zwraca mi niezdefiniowane. –

+0

+1 dla edycji, ma sens w przypadku renderowanego źródła. –

+1

Powoduje zwrócenie undefined –

6

natknąłem to pytanie, gdy próbuje zrobić coś podobnego, i odkrył, że PrimeFaces naraża widgetu JQuery elementu za pośrednictwem właściwości jq.

Tak w przykładzie, można po prostu zrobić:

function loadPlayer() { 
    alert(youtlink.jq.val()); 
} 

W nowszych wersjach PrimeFaces (od 5.0), wywożone widgety wydają się nie zanieczyszczać globalnej przestrzeni nazw, ale muszą być dostępne przy użyciu metody PF(). Elementu JQuery można jednak nadal uzyskać dostęp w ten sam sposób.

function loadPlayer() { 
    alert(PF('youtlink').jq.val()); 
} 
0

Ponadto, istnieje prosty sposób z javascript:

<h:form id="yourID" > 
    <p:inputText id="anyID" value="any text" widgetVar="youtlink" ></p:inputText> 
</h:form> 

function loadPlayer() { 
    alert(document.getElementById('yourID:anyID').value); 
} 
1

My myślę najprostszy sposób:

PF('youtlink').jq.val(); 

Można nawet ustawić wartość pola wejściowego tak:

PF('youtlink').jq.val('new value'); 

inny sposób:

PrimeFaces.widgets.youtlink.jq.val() 

i inny sposób, jeśli masz ID:

$(PrimeFaces.escapeClientId("yourFormID:youtlink")).val() 

przetestowany z PF 5,3