Απόδωση μοναδικής τιμής σε element id

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από chchrist » 23 Νοέμ 2006 20:27

Προσπαθώ να κάνω το εξής

Έχω ένα <input type="button" />

Κάθε φορά που το πατάω κάνω appendChild() κάποια elements.

Μαζί με τα elements αυτά κάνω append και ένα button που θα διαγράφει αυτά που έχουν γίνει append.

ένα lite παράδειγμα.

Κώδικας: Επιλογή όλων

function createInput&#40;&#41; &#123;

var input = document.createElement&#40;"input"&#41;;
var close = document.createElement&#40;"input"&#41;;

document.body.appendChild&#40;"input"&#41;;
document.body.appendChild&#40;"close"&#41;;

input.setAttribute&#40;"type","text"&#41;;
input.setAttribute&#40;"name","songs&#91;&#93;"&#41;;
input.setAttribute&#40;"id",""&#41;;


close.setAttribute&#40;"type","button"&#41;;
close.setAttribute&#40;"value","close"&#41;;
close.setAttribute&#40;"id",""&#41;;

&#125;
Θέλω στο id κάθε φορά που θα καλείται η function να δίνετε μία μοναδική τιμή για να μπορώ μετά με μια άλλη function να σβήνω το κάθε input ξεχωριστά...

Ευχαριστώ προκαταβολικά :)

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από skeftomilos » 23 Νοέμ 2006 21:42

Μπορεί να γίνει όπως λες με ids αλλά δεν είναι απαραίτητο. Συνήθως είναι προτιμότερο να κρατηθούν κάπου πρόχειρα τα object references, μέχρι να έρθει η ώρα της διαγραφής.

Κώδικας: Επιλογή όλων

var button = document.createElement&#40;'button'&#41;
button.onclick = function&#40;&#41; &#123;
  button.parentElement.removeChild&#40;button&#41;
&#125;
document.body.appendChild&#40;button&#41;
Αντί για global variables ένα βολικό μέρος να κρατηθούν τα references είναι ως ιδιότητες κάποιου element:

Κώδικας: Επιλογή όλων

button.otherElement = someElement
button.onclick = function&#40;&#41; &#123;
  this.otherElement.parentElement.removeChild&#40;this.otherElement&#41;
&#125;
Btw, στη συγκεκριμένη περίπτωση υπάρχουν υποκατάστατα της setAttribute. Π.χ. αντί για input.setAttribute('type', 'text') το input.type = 'text'
Τελευταία επεξεργασία από το μέλος skeftomilos την 25 Νοέμ 2006 11:32, έχει επεξεργασθεί 1 φορά συνολικά.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από chchrist » 23 Νοέμ 2006 22:58

Μάλιστα... θα το ψάξω αύριο αυτό που λες.
Κοίτα λιγάκι και εδώ. Πήγαινε στο ήχος και πάτησε το πρόσθεση κομματιών. Θέλω όταν πατάει κάποιος το διαγραφή να σβήνεται το κάθε input.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από cherouvim » 23 Νοέμ 2006 23:27

Γιατί θες να σβήνεις; Χειρίσου το απλά στο server side. Ότι είναι άδειο μην το υπολογίσεις.

http://www.freestuff.gr/forums/viewtopic.php?p=184399

Και αυτό που θες σε μια πρόχειρη υλοποίηση: http://temp.cherouvim.com/forums/addinput2

Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από chchrist » 24 Νοέμ 2006 09:53

Ευχαριστώ πολύ cherouvim! Δεν το έιχα σκεφτεί καθόλου το cloneNode και φυσικά την όλη υλοποίηση...

Τώρα γιατί θέλω να τα σβήνω είναι για να μην μου αγχώνεται ο user οτι άφησε κάτι κενό...

Φυσικά μπορώ να μην το υπολογίσω στο server side αλλά μου κάνουν την ερώτηση "αχ τι έκανα τώρα έβαλα παραπάνω..." πολλές φορές.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από skeftomilos » 24 Νοέμ 2006 18:56

Cherouvim just a note. Ο παρακάτω κώδικας δημιουργεί circular reference που ο IE αδυνατεί να αντιμετωπίσει. Δηλαδή προκαλεί memory leak.

Κώδικας: Επιλογή όλων

var del = document.createElement&#40;"a"&#41;;
del.onmouseover=function&#40;&#41;&#123;this.style.cursor='pointer'&#125;;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από cherouvim » 24 Νοέμ 2006 20:57

Το έχουμε ξανασυζητήσει, αλλά αδυνατώ να καταλάβω τα closures. Αν θες δώσε λύση :)

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από skeftomilos » 24 Νοέμ 2006 21:23

Υπάρχουν δύο λύσεις. Η πρώτη είναι να γίνουν null οι local variables στις οποίες έχει πρόσβαση η closure:

Κώδικας: Επιλογή όλων

var del = document.createElement&#40;'a'&#41;;
del.onmouseover=function&#40;&#41;&#123;this.style.cursor='pointer'&#125;
del = null
Η δεύτερη είναι η αποφυγή των closures με χρήση global functions:

Κώδικας: Επιλογή όλων

var del = document.createElement&#40;'a'&#41;
del.onmouseover = del_mouseover

function del_mouseover&#40;&#41;&#123;this.style.cursor='pointer'&#125;
Καμία από τις δύο λύσεις δεν είναι πολύ κομψή. Όπως και νά 'χει το πρόβλημα είναι ο ελαττωματικός garbage collector του IE6, οι άλλοι browsers μπορούν και καθαρίζουν τη μνήμη παρά τις circular references (του IE7 συμπεριλαμβανομένου).
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από chchrist » 24 Νοέμ 2006 22:20

άσχετο αλλά το δεύτερο τρόπο (την λογική) τον χρησιμοποιώ πολύ στην actionscript...

edit: γενικά οι δύο αυτές γλώσσες μου φαίνεται πως μοιάζουν στην λογική.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Απόδωση μοναδικής τιμής σε element id

Δημοσίευση από skeftomilos » 24 Νοέμ 2006 23:17

Yeap, είναι και οι δύο διάλεκτοι της ECMAScript
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης