Як выбраць кампаненты JSF з дапамогай JQuery?

Я спрабую рэалізаваць jQuery з PrimeFaces і JSF кампанентаў, але гэта не працуе належным чынам. Калі я паспрабаваў зрабіць тое ж самае з HTML-тэгах, S працуе належным чынам.

Вось код з HTML-тэгамі, які працуе належным чынам з JQuery:

<input type="checkbox" id="check2">
 

з

$("#check2").change(function() {
    if ($("#check2").is(":checked")) {
        $("#p2").hide();
    } else {
        $("#p2").show();
    }
});

Here is the code з PrimeFaces/JSF which doesn't work properly з jQuery:


    

з

$("#rad").change(function() {
    if ($("#rad:checked").val() == "one") {
        $("#p2").hide();
    } else {
        $("#p2").show();
    }  
});
35

4 адказы

You should realize that jQuery works with the HTML DOM tree in the client side. jQuery doesn't work directly on JSF components as you've written in the JSF source code, but jQuery works directly with the HTML DOM tree which is generated by those JSF components. You need to open the page in webbrowser and rightclick and then View Source. You'll see that JSF prepends the ID of the generated HTML input elements with the IDs of all parent NamingContainer components (such as , , etc) with : as default separator character. So for example


    
    ...

у канчатковым выніку ў генераванай HTML, як

<form id="foo" name="foo">
    <input type="checkbox" id="foo:bar" name="foo:bar" />
    ...

Вы павінны выбраць элементы ад дакладна , што ID замест гэтага. <�Код>: Аднак спецыяльны знак у ідэнтыфікатарах CSS, якія прадстаўляюць селектар псеўда. Для таго, каб выбраць элемент з : у ID з дапамогай CSS селектары ў JQuery, вам неабходна альбо пазбегнуць яго ўжыць зваротны слэш або выкарыстаць [ID = ...] атрыбут селектар або проста выкарыстоўваць стары getElementById() :

var $element1 = $("#foo\\:bar");
// or
var $element2 = $("[id='foo:bar']");
// or
var $element3 = $(document.getElementById("foo:bar"));

Калі вы бачыце автогенерируемые j_idXXX частку ў ID, дзе XXX ўяўляе сабой паслядоўны нумар, то <�моцны> павінен даць канкрэтны кампанент фіксаваны ідэнтыфікатар, таму што інкрэментаванага нумар дынамічны і схільныя зменам у залежнасці ад фізічнага палажэнні кампанента ў дрэве.


У якасці альтэрнатывы, вы можаце проста выкарыстоўваць імя класа:


які заканчваецца ў HTML, як

<input type="..." class="someClassName" />

так што вы можаце атрымаць яго ў якасці

var $elements = $(".someClassName");

Гэта дазваляе лепш абстракцыі і паўторнае выкарыстанне. Вядома, тыя з элементаў, не з'яўляюцца унікальны . Толькі асноўныя элементы макета, такія як загаловак, меню, змест і калантытул сапраўды ўнікальныя, але яны, у сваю чаргу, як правіла, не ў NamingContainer ўжо.


Як раз іншай альтэрнатывы, вы можаце проста перадаць сам HTML DOM элемент у функцыю:


function someFunction(element) {
    var $element = $(element);
   //...
}

Глядзі таксама:

72
дададзена

Вы таксама можаце выкарыстоўваць jQuery «Навык змяшчае селектар» (тут з'яўляецца гіперспасылка Http://АПА. jquery.com/attribute-contains-selector/ )

Напрыклад калі ў вас ёсць

  

і вы хочаце зрабіць што-то на сваім аб'екце Вы можаце пазначыць яго

jQuery('input[id*="quantity"]')

і калі вы хочаце надрукаваць яго значэнне, якое вы можаце зрабіць гэта

alert(jQuery('input[id*="quantity"]').val());

Для таго, каб ведаць рэальны HTML-тэг элемента, які вы заўсёды можаце паглядзець на рэальны HTML элемента (у дадзеным выпадку блешні быў пераведзены на ўваход) з дапамогай Firebug або гэта значыць распрацоўшчык інструментаў або прагледзець зыходны код ...

Дэніэл.

5
дададзена
Вялікая знаходка! Нават лепш, вы можаце выкарыстоўваць «Навык Канцы З Selector»: api.jquery.com/Attribute канцы-з-селектар , які выглядае, як гэта ў PrimeFaces: "@ (* [ідэнтыфікатар $ = 'IDUsedInPrimeFaces'])" (гэта дазволіць вам выбраць кампанент з ID = "IDUsedInPrimeFaces", нават калі яго ідэнтыфікатар кліента будзе нешта больш падобна на ID =. «форма: IDUsedInPrimeFaces»)
дададзена аўтар Andrew, крыніца

enter image description here look this will help you when i select experience=Yes my dialoguebox which id is dlg3 is popup.and if value is No it will not open

3
дададзена

If you're using RichFaces you can check rich:jQuery comonent. It allows you to specify server side id for jQuery component. For example, you have component with specified server id, then you can apply any jQuery related stuff to in next way: .

Для атрымання дадатковай інфармацыі, калі ласка, праверце doumentation .

Спадзяюся, што гэта дапамагае.

1
дададзена