Chlapci, mám 2 otázky, ktoré si myslím, že nejakým spôsobom súvisia. Najprv:
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");
}
}]
});
}