/ / Vložiť 'dokument' do 'samotného selektora' do jQuery? - javascript, jquery, jquery-ui

Dáte do jQuery „dokument“ oproti „samotnému selektoru“? - javascript, jQuery, jQuery-ui

Chlapci, mám 2 otázky, ktoré si myslím, že nejakým spôsobom súvisia. Najprv:

  1. Aký je rozdiel medzi týmito dvoma:

    $(document).on("click","#someselector", function() {
    
    //do something
    
    });
    

vs toto

$("#selector")on("click", function(){
/do something
});

Niekedy fungujú obe, niekedy nie.

Otázka č. 2:

Vytvoril som jQuery UI dialóg takto:

function this_dialog(id) {

$("#div-id-for-the-dialog").dialog({
autoOpen            : false,
modal               : true,
draggable           : false,
width               : 400,
buttons         : [{
id      : id,
text    : "Ok"
},{
text    : "Cancel",
click   : function () {
$("#div-id-for-the-dialog").dialog("close");
}
}]
});

}

Takže ako vidíte, id sa odovzdá funkcii, mnohí tento dialóg vyvolajú a predajú mu jedinečné ID. ID bude potom priradené iba k Ok Tlačidlo.

Takže keď volám túto funkciu na načítanie jedinečného dialógového okna:

add_section_complete_reopen_dialog("my-unique-dialog-id"); //passing the id
$("#div-id-for-the-dialog").html("I have a unique dialog now? ok?");

Keď stlačím ok s týmto kódom:

$(document).on("click","#my-unique-dialog-id", function () {
//Do some ajax call here
});

Mám túto chybu JS: TypeError: s is undefined Ajax je ale úspešný. Chcem len vedieť, čo je to za chybu.

Takže keď poviem, že to súvisí s prvou otázkou, je to preto, že keď nahradím kód kliknutia týmto:

$("#my-unique-dialog-id").on("click", function () {
//Do some ajax call here
});

Už to nefunguje.

Vďaka

odpovede:

7 pre odpoveď č. 1
$(document).on("click", "someselector", function() ...);

je delegácia syntax. Umožňuje vám viazať obslužnú rutinu na prvky, ktoré v čase vykonania kódu nemusia existovať. Pozri:

Udalosť viazanie na dynamicky vytvorené prvky?

$("someselector").on("click", function() ...);

iba spracuje obslužnú rutinu s prvkami zodpovedajúcimi selektoru v čase, keď vykonáte tento kód.


0 pre odpoveď č. 2

Prvú odpoveď som označil ako správnu, pretože viemNeuviedol som dostatok informácií o tom, ako ladiť druhú otázku, ale v prípade, že by sa niekto mohol stretnúť s rovnakou chybou, akú som mal, zistil som prečo. Keď teda inicializujete dialógové okno používateľského rozhrania jQuery takto:

function this_dialog(id) {

$("#div-id-for-the-dialog").dialog({
autoOpen            : false,
modal               : true,
draggable           : false,
width               : 400,
buttons         : [{
id      : id,
text    : "Ok"
},{
text    : "Cancel",
click   : function () {
$("#div-id-for-the-dialog").dialog("close");
}
}]
});

}

Nezabudnite zahrnúť udalosť kliknutia tlačidiel, ako je táto:

funkcia this_dialog (id) {

$("#div-id-for-the-dialog").dialog({
autoOpen            : false,
modal               : true,
draggable           : false,
width               : 400,
buttons         : [{
id      : id,
text    : "Ok",
click   : function () {
//include the click event, even if you have nothing to put here.
}
},{
text    : "Cancel",
click   : function () {
$("#div-id-for-the-dialog").dialog("close");
}
}]
});

}