Newsgroup: it.comp.lang.javascript
Titolo: Da una array visualizzata, escludere le parole introdotte in un altro campo in battitura

Ciaoa tutti,
vediamo se riesco a farmi capire.
Ho un campo chiamiamolo "Parole"
č un array di valori tipo che arriva dal database tipo: "banana, mela, pera,
mandarino, limone, ananas,"
Vengono visualizzati in un campo testo di un form.
Ora vorrei che mentre digito del testo in una altro campo del form,
chiamiamolo "Storia", i primi scompaiano dalla visualizzazione, in modo che
chi scrive si puň focalizzare sui termini che non ha ancora messo.
//Campo della array
var StrParole = parent.document.forms['myForm'].ArticoloCorpo.value;
//penso che devo fare un ciclo di controllo
var StrCorpo = StrCorpo.indexOf('[????????????]');
Mi date una mano...
Grazie Alen

 Mi date una mano...
Volentierissimo, solo che non ho ben capito come vengono digitate queste
parole: l'utente digita una parola, preme invio e va tolta dall'altro campo?
Oppure le digita tutte in fila separate da virgola? Può scriverle anche in
ordine sparso o esattamente come sono scritte nell'altro campo? Il controllo
va fatto ogni volta che viene premuto un tasto o ha un tasto "verifica" (o
anche premendo invio) dopo il quale viene effettuato questo controllo?

 anche premendo invio) dopo il quale viene effettuato questo controllo?
Scusa per le mie incorrettezze che davo per scontato.
1) all'ingresso nella pagina tu devi 2 campi.
A
_
B
in A c'č una stringa come questa:"banane, mele, pere, albicocche, carciofi,"
in B nulla perchč tu devi scrivere.
B č un campo in cui viene scritto un testo descrittivo, un branetto.
Quindi vorrei che sull'evento "onKeyDown" o "onKeyUP", lo script escludesse
(non piů visualizzate) le parole che ho digitato in B.
Esempio:
ore 12:00:00
in A c'č: "banane, mele, pere, albicocche, carciofi,"
B nulla
inizio a scivere alle 12:00:10
in B:"Ieri al mercato ho comperato 2 banane (Tin! Scompare banane da A), poi
la signora Pina mi ha dato anche una splendido cesto di mele (Tin! scompare
anche mele) per mia mamma.
Claro?
Grazie

 Claro?
Ok, č chiaro e la vedo male...
per il campo A non ci sono problemi.
Campo B: come scrivi te ok perché basta separare le parole con lo spazio; ma
se uno mi mette i segni di interpunzione? Es. virgola, punto e virgola, due
punti etc etc? cioé: ok banane, ma banane, come lo gestisco? Non puoi solo
cercare la parola, altrimenti se in A ho mele e uno mi scrive melenso
scompare => devi distinguere le parole.
Ci sarebbe poi anche la cancellazione (scrivo banana e scompare, schiaccio
il backspace e rimane scritto banan e deve ricomparire).
Se in A ci sono solo numeri, lettere e _ ho buttato giů una paginetta, vedi
un po' se funziona tutto:
<html><head>
<script language='JavaScript'>
 var A;
 Array.prototype.exist=function(v) {
  for(var _x=0;_x<this.length;_x++)
   if(this[_x].toUpperCase()==String(v).toUpperCase()) return _x;
  return -1;
 }
 function verifica() {
  with(document.forms['f']) {
   var B=String(elements['b'].value).match(/\w+/g);
   if(B==null) {
    elements['a'].value=A.join(',');
    return false;
   }
   var ris="";
   for(var x=0;x<A.length;x++)
    if(B.exist(A[x])==-1) ris+=(ris==""?"":",")+A[x];
   elements['a'].value=ris;
  } //with form
 }
</script>
</head><body
onload="A=String(document.forms['f'].elements['a'].value).split(',')">
<form name='f'>
<input type=text name='a' value='banane,pere,mele' readOnly>
<input type=text name='b' value='' onkeyup='verifica()'>
</form>
</body></html>

 il backspace e rimane scritto banan e deve ricomparire).
Hai fatto un lavoro straordinario!!
E' perfetto!!!!!!!
Adesso ci smaneto un po' ma è grandioso.
Sai cosa ti dico:
ti mando un cesto di frutta....
; ))))
Ora ci smanetto un po' e vedo se va in tilt.
Tanchiù

 ha scritto nel messaggio
news:bujmeh$igc34$1...@ID-147253.news.uni-berlin.de...
O ma quante me ne hai risolte?
: ))))

Felice di esserti stato d'aiuto
ciao e a presto


> ; ))))
Cristiano, fra caffe, brioche e cesti di frutta che ci vogliono dare, qua
mettiamo su una coperativa.
Cmq credo che dovremmo cambiare "campo di applicazione", di donne che
spippolano in javascript ce ne son poche, ed io sinceramente preferirei
pagamenti in natura da loro.. (che avete capito, sempre a cesti di frutta
mi riferisco, ovviamente.. =P )
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'
che sara', non cambia cio' che e'.
Sta a te decidere poi come prendere questa cosa,se logorarsi per un passato
che non puoi cambiare, invece di prendere tutto il bene che il presente ti
offre." ()

 mi riferisco, ovviamente.. =P )
.......Sai ahimé che "tengo famiglia"... :-/
Facciamo cosě: anziché una cooperativa mettiamo sů una comune (tanto siamo
tutti e 2 in cerca di casa), poi io prendo il cibo e te il "resto"...ok? :-)

 tutti e 2 in cerca di casa), poi io prendo il cibo e te il "resto"...ok? :-)
Una comune con qualche modella, o atleta, o ballerina di flamenco non la
vedrei una malvagia idea.. conosci nessuna? ;)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 vedrei una malvagia idea.. conosci nessuna? ;)
Ahimé no, ma in tal caso sarebbe da discutere la mia prima ipotesi...:-)))

 mi riferisco, ovviamente.. =P )
di pere, immagino :)
--
artemis.alpeia
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 di pere, immagino :)
Whops.. sgamato :/
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,


 ciao e a presto
Ok, ti complico la vita ora.....   ; ))
Questa è la partenza, quella identica di prima.
----

----
Nuova ipotesi
Il campo A, quello sopra è un campo testo multiline, e non più testo in
linea, ok?
Qui verranno introdote delle frasi tipo:
Mele rosse
albicocche profumate
succo di limone
Insomma una serie di parole che VANNO A CAPO NEL CAMPO.
Ora nella mio box di testo B, vorrei controllare che ci fosse almeno una di
queste parole composte.
Ogni riga è una chive definiamola così. La difficoltà sta per l'appunto su
come faccio a definire le array dato che sono valori di un unico campo. Come
li spezzo sul carattere a capo?
P.S.: come faccio a far scrivere dinamicamente il testo in un punto della
pagina, tipo "OK bravo 1 chiave inserita?"
Spero che mi hai capito, altrimenti dimmi pure..
Giuro che più complicato di così non mi spingo altre  :PPPPPPP
BYE

 pagina, tipo "OK bravo 1 chiave inserita?"
Metti un div dove vuoi con id, e poi scrivici dentro con
document.getElementById('tuoiddeldiv').innerHTML="tuo testo";

 Bellina, bravo :)
Né che è simpatica? Direi "un po' alla Zer0"...:-)
[CUT]
Eh, non riesco ad inquadrare bene il problema...posso provarci sicuramente,
posta qualche riga di codice così capisco esattamente dove sta il problema.

Che ne dici di
   var re=eval("/"+ar[i]+"(?:\\W+|$)/");
   if (!t.match(re)) { // quando nel testo non esiste ar[i]
?

> Cosě com'č, il debugger di IE mi dice "quantificatore inatteso",
Stranissimo, io lo ho provato e mi funziona perfettamente (IE6sp1 Eng);
avevo dubbi su quel $ finale (per dirgli "o c'č un carattere non
alfanumerico, oppure sei alla fine della stringa" ma ho provato e ho visto
che funziona

[...]
 >>>se in A ho mele e uno mi scrive melenso
 >>>scompare => devi distinguere le parole.
 >
 >
 > Ecco, vorrei matchare "mele", "mele ", "mele, " ma NON "melenso" né 
"dammele".
 > Occorre una RegExp che non è alla mia portata.
Non ho letto il thread e non so se si adatta a quanto volevate.
Ti rispondo solo a questa frase:
var s="Mele, queste sono mele, solo mele per carita', e citate in un
modo un po' melenso. Dammele quindi.";
alert(s.match(/\bmele\b/gi));

 meglio me ne ripassi le caratteristiche con tutta calma.
Usi il costruttore dell'oggetto:
new RegExp("\\b"+arr[i]+"\\b","gi");

IE6sp1 Eng ambiente win2000:
<html><head>
<script type="text/javascript">
var ar=["mele", "banane", "pere", "albicocche", "carciofi"]; // array
"immobile"
function f(t) {
   var a=[]; // nuovo array
   for (var i=0;i<ar.length;i++) {
      var re=eval("/"+ar[i]+"(?:\\W+|$)/");
      if (!t.match(re)) { // quando nel testo non esiste ar[i]
      a[a.length]=ar[i];    // aggiungo un elemento al nuovo l'array
      }
   }
 document.foo.A.value=a;
}
</script>
</head>
<body onload="document.foo.A.value=ar;">
<form name="foo">
<input type="text" name="A" size="50">
<input type="text" name="B" size="50" onkeyup="f(this.value);">
</form></body></html>
Quanto sopra funziona perfettamente a me

 torna fuori.
Anche qui intervengo senza provare (sono sempre di fretta in questo 
periodo).
Probabilmente il "quantificatore inatteso" e' il "?:" che non e' 
riconosciuto in vecchi engine di jscript/javascript, e ie per mac 
comincia ad avere una certa eta'.

 ha scritto nel messaggio
news:buogvt$kcnba$1...@ID-147253.news.uni-berlin.de...
Questa è la partenza...per un po' di giorni non ho potuto metterci mano.
Ora l'ho vista e funziona ma ha un problema molto strano.
Se come qui i valori sono scritti all'interno del campo form ok perfetto.
Invece se questi provengono come nel mio caso da un DB, quindi...
<textarea name="MetaKeywords" cols="100" readonly="readOnly"
id="MetaKeywords"><%=ObjRs("Str")%></textarea>
...il gioco di sparizione non funziona.
Non riesco proprio a capire il perchè. La pgina è dinamica, ma quando viene
visualizzate per forza di cose è già completa. Non riesco a capire proprio
il motivo!
Ho fatto delle prove escludendo il rendering in ASP, ok si vede e funziona,
ma con quello non va.
Anzi se lascio entrambe (il tag di ASP e i valori direttamente scritti nella
pgina) spariscono solo le parole non dinamiche...quelle nella pagina già
scritte nel codice HTML????!!!!
Qualche spiegazione logica?
BYE
------
<html>
<head>
<script language='JavaScript'>
 var A;
 Array.prototype.exist=function(v) {
  for(var _x=0;_x<this.length;_x++)
   if(this[_x].toUpperCase()==String(v).toUpperCase()) return _x;
  return -1;
 }
 function verifica() {
  with(document.forms['myForm']) {
   var B=String(elements['ArticoloCorpo'].value).match(/\w+/g);
   if(B==null) {
    elements['MetaKeywords'].value=A.join(',');
    return false;
   }
   var ris="";
   for(var x=0;x<A.length;x++)
    if(B.exist(A[x])==-1) ris+=(ris==""?"":",")+A[x];
   elements['MetaKeywords'].value=ris;
  } //with form
 }
</script>
</head>
<body
onload="A=String(document.forms['myForm'].elements['MetaKeywords'].value).sp
lit(',')">
 <form name='myForm'>
  <textarea name="MetaKeywords" cols="100" readonly="readOnly"
id="MetaKeywords">banane,pere,mele,pesche,albicocche,more,erba,verdure,colog
na,ribes,insalata,verza</textarea>
  <br>
  <textarea name="ArticoloCorpo" cols="100" rows="10" onKeyUp="verifica()"><
/textarea>
 </form>
</body>
</html>
-------

  }
Io ho da capire perche' passi sempre da String(); fai un passaggio in
piu'.. 
Inoltre se vuoi rendere exist() metodo generalizzato di Array dovresti
farlo a prescindere dal tipo stesso. Un array puo' anche non essere di
stringhe, ma di oggetti, e magari vorrei verificare se un certo oggetto e'
gia' presente in un array o meno.


    var re=eval("/"+ar[i]+"(?:\\W+|$)/");
var re=new RegExp(ar[i]+"(?:\\W+|$)");


 postesse servire) ora so a cosa può servire.
Ach, ho appena scritto un post proprio su questo, mi spiace non che non ti
sia piu' utile. :)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 piu'..
Anche qua: è una abitudine; anche il buon Catarsi (o Balestra?) qualche
tempo fa me lo ha fatto notare..abitudine, solo abitudine