Newsgroup: it.comp.lang.javascript
Titolo: Controllo dinamico sui campi

 ha scritto nel messaggio
news:buogvt$kcnba$1...@ID-147253.news.uni-berlin.de...
222222222222222222222222222222222222
Il secondo script di fatto è uguale, solo che le parole del primo non sono
spezzate con degli "a capo", ma sono separate da ","
Questo sotto è perfettamente funzionante tranne il fatto che:
Non è key Sensitive e poi la stringa di parole è in un "imput text", se lo
trasformo in "textarea" e vanno a capo non funziona!
---------------------
<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>
Ciao e grazie a tutti...

Ti invito a rileggere quello che ti ho scritto perché se salti dei pezzi per
forza non funziona nulla; sto cercando di ricostruire il tutto nel poco
tempo che ho, vedo che:
11111111111111111111111111111
a) non hai messo l'onload come ti avevo detto, e quindi non carica l'array
A:
<body
onload='A=String(document.forms["myForm"].elements["Keyword"].value).split("
\n")'>
b) per renderlo NON case-sensitive trasforma in maiuscolo:
if(String(elements['Titolo'].value).toUpperCase().indexOf(A[x].replace(/\n|\
r/g,"").toUpperCase())==-1) ...............
Vedi un po' se così funziona, e riporta le considerazioni indicate sopra
anche nel 222222222222222222222222222222.

 ha scritto nel messaggio
news:c0ad85$14r4hm$1...@ID-147253.news.uni-berlin.de...
Lo sapevo che mi bacchettavi....
;((((((((((((((((
OK ora riprovo a mettere tutto insieme, do my home works, poi semmai ributta
un okkio nel post..
BYE BYE

 ha scritto nel messaggio
news:c0ad85$14r4hm$1...@ID-147253.news.uni-berlin.de...
Ho introdotto gli aggiustamenti che mi hai detto...
però mi da sempre essrore alla riga 8??
 for(var x=0;x<A.length;x++)
sulla variabile A?
Why??
-------------------------
<html>
<head>
<script language="JavaScript" type="text/JavaScript">
<!--
var A;
function verifica() {
 with(document.forms['myForm']){
 var ris="";
 for(var x=0;x<A.length;x++)
if(String(elements['Titolo'].value).toUpperCase().indexOf(A[x].replace(/\n|\
r/g,"").toUpperCase())==-1)
   ris+=(ris==""?"":"\n")+A[x];
   elements['Keyword'].value=ris;
 } //with form
}
 -->
</script>
</head>
<body>
<form name="myForm"
onLoad="A=String(document.forms["myForm"].elements["Keyword"].value).split("
,")">
  <textarea name="Keyword" id="Keyword" rows="10">mela,pera,albicocca,casa
rossa,nero</textarea>


l'onload va messo nel body, non nella Form
Non hai quello originale che ti ho postato??

 Why??
hai provato
for (var x=0; x<A.length(); x++)
??
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}

 for (var x=0; x<A.length(); x++)
Si ho provato da sempre errore...

 Non hai quello originale che ti ho postato??
Si hai ragione mia svista....
ecco ora dovrebbe essere come me lo hai passato e con le modifiche.
Sul caricamento mi da errore sempre sull'Onload del BODY??
TNKS
----
<html>
<head>
<script language="JavaScript" type="text/JavaScript">
<!--
var A;
function verifica() {
 with(document.forms['myForm']){
 var ris="";
 for (var x=0; x<A.length; x++)
if(String(elements['Titolo'].value).toUpperCase().indexOf(A[x].replace(/\n|\
r/g,"").toUpperCase())==-1)
   ris+=(ris==""?"":"\n")+A[x];
   elements['Keyword'].value=ris;
 } //with form
}
 -->
</script>
</head>
<body
onLoad="A=String(document.forms["myForm"].elements["Keyword"].value).split("
,")">
<form name="myForm">


onload=' <= singola virgoletta, altrimenti fa casini con le doppie
virgolette....oppure, al contrario (forse meglio) usa la doppia virgoletta
onload="....." e metti le singole al posto delle doppie nella parte
"Interna"
Non voglio ripetermi, ma non ti basta un copiaincolla da quello che ti avevo
scritto tempo addietro?


Complimenti. Hai una pazienza incredibile. Ma chi te lo fa fare? Pensi che
sia giusto?
Ciao.
	-Ema-

 sia giusto?
Invece tu cosa pensi sia giusto?
Decretare una soluzione e poi dire, cavolacci suoi ora?
Per questo ringrazio due volte Cristiano non una.
La pazienza e il tempo sono la prima ricchezza di una persona.
In quanto allo storico post, si certo c'era tutto forse, magari non ho ben
capito io dov'era dato che ci sono una caterba di scherzosi messaggi tra Lui
e Riccardo sulle cassette di frutta...
Senza rancore, č...
;--))

 sia giusto?
Beh, io sottolineo la cosa perché normalmente (ahimé il tempo è tiranno!)
rispondo solo a domande semplici, mentre questa richiedeva uno script
"complesso"; ma, dato che mi aveva incuriosito, mi sono messo a farlo
velocemente; per questo non capivo come mai non copiaincollava il mio script
(fatto in 2-3 versioni tra l'altro perché la richiesta è variata nel tempo).
Poi insomma, ogni persona è diversa da un'altra, dico "magari non ha capito"
o "si è copiaincollato lo script solo in parte per errore" o chissà
cos'altro...

 e Riccardo sulle cassette di frutta...
Beh beh, fai il bravo...a parte che mi sa che era Zer0 e non Riccardo, e in
un post dove hai ricevuto una quantitą immane di possibili soluzioni (non
solo mie) la "caterba di scherzosi messaggi" erano 4....ci ho messo circa 30
secondi a recuperare tutti i vari scripts che ti ho fatto.

 secondi a recuperare tutti i vari scripts che ti ho fatto.
OK chiudo, meglio che sto zitto, hai ragione in tutto,
alla prox e grazie.

 ;--))
Neppure tu, mi raccomando. :)
Ciao.
	-Ema-

 Neppure tu, mi raccomando. :)
Assolutamente...per carita!
Bye e grazie dell'osservazione!
Alen

 ha scritto nel messaggio
news:c0b466$14qrns$1...@ID-147253.news.uni-berlin.de...
OK sistemata e funziona alla perfezione!!!!!!!
----------------------------
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
}
------------------------------
l'errore che facevo era sull'onload....lo split doveva esse su (", ") e non
("',").
Una cosa: ho provato a fare il controllo della cencellazione dal campo
MetaKeywords utilizzando un secondo campo "TitoloArticoloCorpo", quindi non
+ uno ma due, ho introdotto una modifica allo script per fare l'effetto
"spazione" pilotato da 2 sorgenti...
___
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);
    //Questa riga sotto č nuova....
    var C=String(elements['TitoloArticoloCorpo'].value).match(/\w+/g);
    //anche l'aggiunta di C==null č nuova
    if(B==null||C==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];
    //Questa riga sotto č nuova....
    if(C.exist(A[x])==-1) ris+=(ris==""?"":",")+A[x];
      elements['MetaKeywords'].value=ris;
  }//with form
}____
Dato che non mi va vorrei sapere se sbaglio qualche cosa nei cicli?
Devo creare un ciclo appositito anche per C?
Se hai voglia rispondimi...bye!!
Intanto continuo a provare...

Non ho capito: adesso vuoi usare non uno ma due campi text, e quindi
controllare le parole inserite sia nell'uno che nell'altro campo per
rimuovere le parole dalla textarea???
Se č cosě io agirei a monte: dove vai a fare lo split delle parole inserite
(dovrebbe essere questa riga:
var B=String(elements['ArticoloCorpo'].value).match(/\w+/g);
)
Ci aggiungerei anche la seconda textbox, del tipo:
var B=String(elements['ArticoloCorpo'].value+'
'+elements['TitoloArticoloCorpo'].value).match(/\w+/g);
Ragionato un po' di corsa ma dovrebbe andare, prova un po'

 Ragionato un po' di corsa ma dovrebbe andare, prova un po'
Perfetto!
Hai vinto un sigaro!
3 Curiosità:
------- 1 --------
nella rex epression non ho capito una lettera:
.match(/\w+/g);
+/g cosa significa? Quella prima \w ogni carattere [a-zA-A0-9] la seconda
non l'ho trovata nel manule sulle Reg Exp che ho?
------- 2 --------
Ho provato ad escludere il +''+ e effettivamente non va bene, non è uguale?
Per mia conoscenza....
var
B=String(elements['ArticoloCorpo'].value+elements['TitoloArticoloCorpo'].val
ue).match(/\w+/g);
var
B=String(elements['ArticoloCorpo'].value+''+elements['TitoloArticoloCorpo'].
value).match(/\w+/g);
------- 3 --------
Se ci fosse nell'array un indice con una parola composa tipo "estate calda",
quindi: gelato,estate,bagno,estate calda,sole
Effetivamente non me la cancella.
E' normale la cosa?
Grazie e ciao!

 E' normale la cosa?
Sì, perché considera le singole parole

 Sì, perché considera le singole parole
Mi servirebbe ;-PPPP,
ma non oso chiedertelo...vedrò se riuscirò a capirci qualche cosa +
avanti...
BYE e TNKS

Se posti la pagina completa che hai fatto provo a proporti qualcosa (con
tutte le modifiche fatte non saprei altrimenti a quale pagina fare
riferimento)

 riferimento)
Vedi che anche tu vai in confusione...figurati io che non capivo il
codice...x mia ignoranza ovvio!
;-))))
Grazie
------------
<html>
<head>
<script language="JavaScript" type="text/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+''+elements['TitoloArticoloCorpo'].
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" rows="3" id="MetaKeywords"
readonly>mela, pera, albicocca, fragolina, mela verde, casa rossa, nero,
rosa, arancio, turchese, panna chiara, grigio fumo londra, lilla</textarea>
  <br>
    <textarea name="TitoloArticoloCorpo" id="TitoloArticoloCorpo" cols="100"
rows="3" onKeyUp="verifica()"></textarea><br>
    <textarea name="ArticoloCorpo" id="ArticoloCorpo" cols="100" rows="10"


 codice...x mia ignoranza ovvio!
Beh, la mia confusione č data dal fatto che sono state fatte un po' di
revisioni alla tua richiesta, e quindi non sapevo alla fine cosa avevi
implementato.
Per quanto riguarda la tua funzione "originale":
a) devi mettere uno spazio quando concateni, altrimenti se scrivi "mela" nel
primo input e "pera" nel secondo non te li toglie:
 B=String(elements['ArticoloCorpo'].value+'
'+elements['TitoloArticoloCorpo'].value).match(/\w+/g); //nota ' ' con lo
spazio in mezzo
b) Quello split(', ') non č molto bello, ti obbliga a mettere sempre degli
spazi all'inizio; te lo ho rimosso e ti ho messo un trim() (toglie gli spazi
all'inizio e alla fine della parola quando fa la comparazione)
Ti scrivo qua la pagina risultante; per quanto riguarda la tua richiesta mi
spiace ma non ho tempo; attualmente effettua uno split per parola e quindi
sarebbe da rifare la logica (in quanto adesso sono diventate N parole);
potresti verificare se nella stringa B esistono i singoli valori dell'array
A, ma si tornerebbe al problema "mela" viene trovata anche se si scrive
"melanzana"; andrebbe quindi fatta una comparazione piů complessa (vedere se
esiste la parola e capire se č una parola e non una parte)....
<html>
<head>
<script language="JavaScript" type="text/JavaScript">
<!--
var A;
Array.prototype.exist=function(v) {
 for(var _x=0;_x<this.length;_x++)
  if(this[_x].toUpperCase()==String(v).toUpperCase().trim()) return _x;
 return -1;
}
String.prototype.trim=function() {
 return this.toString().replace(/^\s*/,"").replace(/\s*$/, "");
}
function verifica(){
  with(document.forms['myForm']) {
    var B=String(elements['ArticoloCorpo'].value+'
'+elements['TitoloArticoloCorpo'].value).match(/\w+/g);


 esiste la parola e capire se č una parola e non una parte)....
No problem hai fatto tantissimo
Grazie....