JavaScript - How To Trim A Long Word
hello,
i want to trim a word that too long.. example "I don't know what i will dooooooooooooooooooooooooooooooo now" how trim it with javascript function so i will get 'I don't know what i will doooo... now" any body help.. Regards, Similar TutorialsSorry about the title, I didn't know what else to use to describe my problem. Basically, I'm generating a random word with a function; then I'm trying to pass this word down to another function. The problem is, when I pass the word, it changes each time (due to it being randomly generated originally). I'm only calling the function once (via button click), but I'm also calling the function in my code lower down to retrieve the returned variable; and the function seems to be running again and returning a new word from my array. Here's a snippet of my code: Code: function ranNum(){ var ranNum = Math.round(Math.random()*10); var chosenWord = wordArray[ranNum]; return chosenWord; } function makeBoxes(x){ //remove children when new word is chosen var hM = document.getElementById("hangMan"); while(hM.firstChild){ hM.removeChild(hM.firstChild); } var chosenWord = ranNum(x); var wL = chosenWord.length; //create box for length of letters in word var i = 0; for(i=0;i<wL;i++){ var cBoxes = document.createElement("div"); cBoxes.className = "letterBoxes"; cBoxes.innerHTML = chosenWord.charAt(i); hangMan.appendChild(cBoxes); } return chosenWord; } function checkLetter(y){ var chosenWord = makeBoxes(y); alert(chosenWord); } So I generate a word with one button; now I need to be able to work with said word in my checkLetter() function. The word changes however. Any help would be greatly received. I found a nice script online that will count words. Problem is, I need it to also count each DIGIT (0-9) as a seperate word, whether the numbers are seperated by a space or not. I've searched this forum to no avail. Can anyone help me or show me how to do this, here is the original script: Code: <!-- TWO STEPS TO INSTALL WORD COUNT: 1. Copy the coding into the HEAD of your HTML document 2. Add the last code into the BODY of your HTML document --> <!-- STEP ONE: Paste this code into the HEAD of your HTML document --> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- Original: Shawn Seley --> <!-- This script and many more are available free online at --> <!-- The JavaScript Source!! http://javascript.internet.com --> <!-- Begin function CountWords (this_field, show_word_count, show_char_count) { if (show_word_count == null) { show_word_count = true; } if (show_char_count == null) { show_char_count = false; } var char_count = this_field.value.length; var fullStr = this_field.value + " "; var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi; var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, ""); var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi; var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " "); var splitString = cleanedStr.split(" "); var word_count = splitString.length -1; if (fullStr.length <2) { word_count = 0; } if (word_count == 1) { wordOrWords = " word"; } else { wordOrWords = " words"; } if (char_count == 1) { charOrChars = " character"; } else { charOrChars = " characters"; } if (show_word_count & show_char_count) { alert ("Word Count:\n" + " " + word_count + wordOrWords + "\n" + " " + char_count + charOrChars); } else { if (show_word_count) { alert ("Word Count: " + word_count + wordOrWords); } else { if (show_char_count) { alert ("Character Count: " + char_count + charOrChars); } } } return word_count; } // End --> </script> </HEAD> <!-- STEP TWO: Copy this code into the BODY of your HTML document --> <BODY> <form> <textarea cols=40 rows=5 name=x> </textarea> <br> <input type=button value="Count Words" OnClick ="CountWords(this.form.x, true, true);"> </form> <p><center> <font face="arial, helvetica" size"-2">Free JavaScripts provided<br> by <a href="http://javascriptsource.com">The JavaScript Source</a></font> </center><p> <!-- Script Size: 2.04 KB --> Have the code check that the statement has at least one character. You can do this by using the trim method to remove spaces from the beginning and end, and then checking the length of the trimmed string. If there are no characters, the response should tell the user to enter something. For example, a possible statement and response would be: Statement: Response: Say something, please. Could someone help me with this? I'm not sure how to make it check to see if the user input has 0 characters. Hi All, how do I trim leading zero in a date e.g 08/08/2003 to become 8/8/2003. thanks Hi All, I have a form in my homepage which takes some values. In that, a text box takes multiple values seperated by spaces. I have allowed only alphanumeric characters in that with the following code. Code: function rmsplcharchkdepo() { var iChars = "\\\/~!@#$%^&*()=+[]{}|;:?,.\"`'<>"; var un= document.getElementById("deposit").value; for (var i = 0; i < document.ipmform.deposit.value.length; i++) { if (iChars.indexOf(document.ipmform.deposit.value.charAt(i)) != -1) { alert ("Error!! Remove Special Characters."); document.getElementById("deposit").value = un.substring(0,0); return false; } } } How can i trim the multiple spaces entered by the user between values instead of one single space allowed.. For eg: TEXTBOX:INDIA USA UK User should not be able to enter a space at the beginning, multiple spaces between the values and at the end. This is just to avoid unwanted complications at the backend. In brief i need a script which trim multiple and consecutive spaces to one. It would be a great help if some one can help me in this. Hello, I would like to create something like this: Practice mental arithmetic both the entire thing and multiple smaller programs that could be embedded into a web page that deal with specific problems, i.e. separate addition, subtraction etc. I have no knowledge of CSS, javascript etc. How long before I could do this? Hi, I would like to get the Lat/Lng coordinates into teh values in my form but instead I get N/E values, Can anyone please help? Here is my page: http://www.nakedsloth.com/where/default.php here is my code: Code: <?php include_once("common.php"); $markers = mysql_query("SELECT * FROM wheremarkers1"); while($row1 = mysql_fetch_array($markers)) { // echo 'Lat: '.$row1['rslat']; // echo 'Long: '.$row1['rslon']; // echo 'Email: '.$row1['rsemail']; // echo 'Name: '.$row1['rsname']; // echo 'Desc: '.$row1['rsdesc']; } // $lat = $_REQUEST['lat']; // $lng = $_REQUEST['lng']; // if($lat != 51.464960 && $lng != -1.40625){ // $lat = $_POST['lat']; // $lng = $_POST['lng']; // } ?> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <!-- Bootstrap core CSS --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- Custom styles for this template --> <link href="css/navbar-fixed-top.css" rel="stylesheet"> <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> <script src="js/ie-emulation-modes-warning.js"></script> </head> <style> body{ font-family: arial; font-size: 13px; width:100%; } #container{ width:100%; } #mapCanvas { width: 70%; height: 80%; float: left; } #infoPanel { width: 400px; float: left; margin-left: 10px; } #infoPanel div { margin-bottom: 5px; } #markerStatus { display:none; } #info { display:none; } #geot { display:none; } body { font: normal 10pt Helvetica, Arial; } ul#topmenu { height:30px; width:100%; margin-top:0px;} ul#topmenu li { display:block; float:left; margin-right:10px; margin-top:14px; } .telephone { display:none; } .website { display:none; } </style> <body style="margin:0px; border:0px; padding:0px;"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript"> var geocoder = new google.maps.Geocoder(); $( document ).ready(function() { }); $( document ).ready(function() { $("#rscategory").change(function(){ var id = $(this).find("option:selected").attr("id"); switch (id){ case "poi": $(".telephone").css( "display","block" ); $(".website").css( "display","block" ); $('input[name="rswebsite"]').val('n/a'); $('input[name="rstelephone"]').val('0'); break; case "hiddenmsg": $(".telephone").css( "display","none" ); $(".website").css( "display","none" ); $('input[name="rswebsite"]').val('n/a'); $('input[name="rstelephone"]').val('0'); break; case "landmark": $(".telephone").css( "display","none" ); $(".website").css( "display","none" ); $('input[name="rswebsite"]').val('n/a'); $('input[name="rstelephone"]').val('0'); break; case "pub": $(".telephone").css( "display","none" ); $(".website").css( "display","none" ); break; case "cafe": $(".telephone").css( "display","none" ); $(".website").css( "display","none" ); break; case "GreatView": $(".telephone").css( "display","none" ); $(".website").css( "display","none" ); $('input[name="rswebsite"]').val('n/a'); $('input[name="rstelephone"]').val('0'); break; } }); }); function geocodePosition(pos) { geocoder.geocode({ latLng: pos }, function(responses) { if (responses && responses.length > 0) { updateMarkerAddress(responses[0].formatted_address); updateMarkerCity(responses[6].formatted_address); updateMarkerCountry(responses[7].formatted_address); } else { updateMarkerAddress('Cannot determine address at this location.'); } var country; for (i=0;i<results[0].address_components.length;i++){ for (j=0;j<results[0].address_components[i].types.length;j++){ if(results[0].address_components[i].types[j]=="Region") country = results[0].address_components[i].long_name } } var city; city = results[1].address_component['rsCity'] }); } function updateMarkerStatus(str) { document.getElementById('markerStatus').innerHTML = str; } function updateMarkerPosition(latLng) { document.getElementById('info').innerHTML = [ latLng.lat(), latLng.lng() ].join(', '); latDir = "N"; lngDir = "E"; if(latLng.lat() < 0){ latDir = "S"; } if(latLng.lng() < 0){ lngDir = "W"; } qlat = Math.abs(latLng.lat()); ilat = Math.floor(qlat); xlat = ((qlat - ilat)*60); qlng = Math.abs(latLng.lng()); ilng = Math.floor(qlng); xlng = ((qlng - ilng)*60); xlat = Math.round(xlat*1000)/1000; xlng = Math.round(xlng*1000)/1000; d2 = xlat.toFixed(3); e2 = xlng.toFixed(3); d1 = ilat.toString(); d2 = d2.toString(); e1 = ilng.toString(); e2 = e2.toString(); n = Math.abs(latLng.lat()); // Change to positive var decimal = n - Math.floor(n) var decimal = n - Math.floor(n); document.getElementById('geot').innerHTML = [ latDir + ' ' + d1 + ' ' + d2, lngDir + ' ' + e1 + ' ' + e2 ].join(', '); document.form1.rsLat.value = [ latLng.lat()]; document.form1.rsLong.value = [ latLng.lng()]; document.form1.rsLat.value = [ latDir + ' ' + d1 + ' ' + d2]; document.form1.rsLong.value = [ lngDir + ' ' + e1 + ' ' + e2]; } function updateMarkerAddress(str) { document.getElementById('address').innerHTML = str; } function updateMarkerCity(city) { document.getElementById('city').innerHTML = city; } function updateMarkerCountry(country) { document.getElementById('country').innerHTML = country; } function centerPosition(newgeo,newzoom) { // document.getElementById('mcenter').innerHTML = [newgeo]; // document.getElementById('mzoom').innerHTML = [newzoom]; // document.form2.mcenter2.value = [newgeo]; // document.form2.mzoom2.value = [newzoom]; document.form1.mcenter1.value = [newgeo]; document.form1.mzoom1.value = [newzoom]; } function initialize() { var latLng = new google.maps.LatLng(51.507222, -0.1275); var map = new google.maps.Map(document.getElementById('mapCanvas'), { zoom: 4, center: latLng, mapTypeId: google.maps.MapTypeId.ROADMAP }); var marker = new google.maps.Marker({ position: latLng, title: 'Point A', map: map, draggable: true }); // Update current position info. updateMarkerPosition(latLng); geocodePosition(latLng); // Add dragging event listeners. google.maps.event.addListener(marker, 'dragstart', function() { updateMarkerAddress('Dragging...'); updateMarkerCity(''); updateMarkerCountry(''); }); google.maps.event.addListener(marker, 'drag', function() { updateMarkerStatus('Dragging...'); updateMarkerPosition(marker.getPosition()); }); google.maps.event.addListener(marker, 'dragend', function() { updateMarkerStatus('Drag ended'); geocodePosition(marker.getPosition()); }); google.maps.event.addListener(map, 'bounds_changed', function(){ var newgeo = map.get('center'); var newzoom = map.get('zoom'); centerPosition(newgeo,newzoom); }); } // Onload handler to fire off the app. google.maps.event.addDomListener(window, 'load', initialize); </script> <!-- Fixed navbar --> <div class="navbar navbar-default navbar-fixed-top" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Project name</a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="active"><a href="#">Home</a></li> <li><a href="#about">About</a></li> <li><a href="#contact">Contact</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> <li class="divider"></li> <li class="dropdown-header">Nav header</li> <li><a href="#">Separated link</a></li> <li><a href="#">One more separated link</a></li> </ul> </li> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="../navbar/">Default</a></li> <li><a href="../navbar-static-top/">Static top</a></li> <li class="active"><a href="./">Fixed top</a></li> </ul> </div><!--/.nav-collapse --> </div> </div> <div class="container"> <!-- Main component for a primary marketing message or call to action --> <div class="jumbotron"> <h1>Navbar example</h1> <p>This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> <p>To see the difference between static and fixed top navbars, just scroll.</p> <p> <a class="btn btn-lg btn-primary" href="../../components/#navbar" role="button">View navbar docs »</a> </p> <p> <ul id="topmenu"> <li><a href="default.php">Add marker</a></li> <li><a href="default2.php">View markers</a></li> </ul> <div id="container"> <div id="mapCanvas"></div> <div id="infoPanel"> <br /> <div id="markerStatus"></div> <div id="info"></div> <div id="geot"></div> <form id="form1" name="form1" action="add.php" method="post"> <input type="hidden" name="newcenter" id="mcenter1" value="mcenter1"> <input type="hidden" name="newzoom" id="mzoom1" value="mzoom1"> <input type="hidden" id="rsLat" name="rsLat" size="18"> <br /> <input type="hidden" id="rsLong" name="rsLong" size="18"> <br /> Name: <input type="text" id="rsname" name="rsPubName"><br /> <b>Category:</b> <select id="rscategory" name="rscategory"> <option id="GreatView" value="Great View">Great view</option> <option id="cafe" value="Cafe">Cafe</option> <option id="pub" value="Pub">Pub</option> <option id="restaurant" value="Restaurant">Restaurant</option> <option id="theatre" value="Theatre">Theatre</option> <option id="venue" value="Venue">Venue</option> <option id="landmark" value="Landmark">Landmark</option> <option id="poi" value="Place of Interest">Place of Interest</option> <option id="hiddenmsg" value="Hidden Message">Hidden Message</option> <option id="secretspot" value="Secret Spot">Secret Spot</option> <option id="hiking" value="Hiking">Hiking</option> <option id="hiking" value="Camping">Camping</option> <option id="dogfriendly" value="Dog Friendly">Dog Friendly</option> <option id="valueformoney" value="Value for money">Value for money</option> <option id="streetview" value="Street View">Interesting street view</option> </select> <br /> Description: <textarea id="desc" name="rsdesc" ></textarea> Address: <textarea id="address" name="rsAddress" ></textarea> <input type="hidden" id="wlat" name="rslat" size="10"><br /> <input type="hidden" id="wlon" name="rslng" size="10"><br /> City: <textarea id="city" name="rsTown" ></textarea><br /> <textarea id="country" name="rsCounty" ></textarea><br /> <div class="telephone"> Telephone: <input type="text" name="rsTel"> </div> <div class="website"> Website: <input type="text" name="rsWebsite"> </div> <input type="submit" name="submit" value="Pin Your Location"> </form> <br /><br /> <!-- <b>Current map center:</b> <div id="mcenter"></div> <div style="float:left;"><b>Current map zoom level: </b></div><div id="mzoom" style="float:left;"></div> <div style="clear:both;"></div> --> <!-- <form id="form2" name="form2" method="post" action="center.php"> <input type="hidden" name="newcenter" id="mcenter2" value="mcenter2"> <input type="hidden" name="newzoom" id="mzoom2" value="mzoom2"> <input type="submit" name="submit" value="Center Marker On Map"> </form> <div style="width:300px; font-size:10pt; color:#999; text-align:justify;">'Center Marker On Map' ... This uses cookies to remember location and zoom level.</div> --> </div> </div> </p> </div> </div> <!-- /container --> <script src="../../dist/js/bootstrap.min.js"></script> <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> <script src="js/ie10-viewport-bug-workaround.js"></script> </body> </html> How do you take a long number such as Math.PI and break it out into an array? For example: [3] [.] [1] [4] [1] [5] [9] I suppose that because of the decimal you would have to convert it into a string first? It would be ideal if I could keep the number as a number without converting it to a string, but I'm not sure if that's possible. Every thread I've found online so far seems to indicate that you need a delimiter between the string you want to split up - that you can't just put every character of a string into an array... but there must be a way. I'm new to Javascript and to these forums. All suggestions welcome. Thanks. Hi All, In javascript is it possible to convert a long number (as hex string) to a float number ? Ex. 40 A0 00 D2 is 5.0001 and reverse I know I can use math functions, then seperate out Sign/mantissa/exponent and then convert it in float, but their must be some easy alternative. Can I use sprintf, is yes how can I use this? Thansk for your help! Regards Max Hi I have the following code which is created server side to convert postcodes from a database into coordinates. I'm fairly sure there's something in the javascript which is preventing all the postcodes from the code being converted. Does anyone have any ideas... This code has been taken from something else so could probably be tidied up a lot but every time I try it stops working. Thanks Code: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Geocoding UK Postcodes with Google APIs Demo</title> <script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=ABQIAAAAQJTCOfFBzEZfb0xYTu1h_BR0_9owy9VLLEJCKI_ZedHr-0NdXxQd9Q8sR1hC7s4PNGNVmIaTUQvspA" type="text/javascript"></script> <script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAAQJTCOfFBzEZfb0xYTu1h_BR0_9owy9VLLEJCKI_ZedHr-0NdXxQd9Q8sR1hC7s4PNGNVmIaTUQvspA" type="text/javascript"></script> </head> <body> <div id="message"></div> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["PL14 4PW, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["EX10 0QN, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["BH19 3HG, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["CT18 8HB, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["NR9 4DD, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["BT94 5HF, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["FK17 8HY, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["SY7 9LT, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["LL58 8HU, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["SA62 3AL, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["DL8 3HQ, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> <script type="text/javascript"> var delay = 0; if (GBrowserIsCompatible()) { var geo = new GClientGeocoder(); function getAddress(search, next) { geo.getLocations(search, function (result) { if (result.Status.code == G_GEO_SUCCESS) { var p = result.Placemark[0].Point.coordinates; var lat=p[1]; var lng=p[0]; document.getElementById("message").innerHTML += lat+ ',' +lng+'<br />'; //This is the line to change... var point2 = new GLatLng(lat,lng); //Need to create this on the fly from the postcode in the database var marker2 = createMarker(point2,'rtyrty'); map.addOverlay(marker2); } next(); } ); } var addresses = ["YO18 8RE, UK"]; var nextAddress = 0; function theNext() { if (nextAddress < addresses.length) { setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); nextAddress++; } else { } } theNext(); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } </script> </body> </html> hi, in my code below, I need to change the line Code: map.setCenter(new GLatLng(i[0], i[1]), 13); to have the LAT and LONG from my database therefore, I think maybe I need to open a database connection (which I think i am on the same page) and put some ASP in my JavaScript?! Code: var i = geoCodes.split(","); if (GBrowserIsCompatible()) { if(eval(document.getElementById("mapping"))) { var map = new GMap2(document.getElementById("mapping")); map.setCenter(new GLatLng(i[0], i[1]), 13); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); Hi, I made some changes to the following example: http://docs.jquery.com/Plugins/validation#Example Code: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js"></script> <style type="text/css"> * { font-family: Verdana; font-size: 96%; } label { width: 10em; float: left; } label.error { float: none; color: red; padding-left: .5em; vertical-align: top; } p { clear: both; } </style> <script> $(document).ready(function(){ $("#commentForm").validate(); }); </script> </head> <body> <form class="cmxform" id="commentForm" method="get" action=""> <fieldset> <legend>A simple comment form with submit validation and default messages</legend> <p> <input id="cname" name="name" size="25" class="required" value="Name" onfocus="if (this.value == 'Name') {this.value=''}" onblur="if(this.value == '') { this.value='Name'}" /> </p> <p> <input id="cemail" name="email" size="25" class="required email" value="Email" onfocus="if (this.value == 'Email') {this.value=''}" onblur="if(this.value == '') { this.value='Email'}" /> </p> <p> <input id="curl" name="url" size="25" class="url" value="URL" onfocus="if (this.value == 'URL') {this.value=''}" onblur="if(this.value == '') { this.value='URL'}" /> </p> <p> <textarea id="ccomment" name="comment" cols="35" rows="5" class="required" onfocus="if (this.value == 'Comment') {this.value=''}" onblur="if(this.value == '') { this.value='Comment'}">Comment</textarea> </p> <p> <input class="submit" type="submit" value="Submit"/> </p> </fieldset> </form> </body> </html> I know how to add custom validation methods for the required fields Name, Email, and Comment. But I just don't know how to validate the optional filed URL. I've searched everywhere to no avail! Any help is greatly appreciated! Desparate I'm trying to use long-polling for a chat program that I am developing. Currently, I have the following setup: Code: var lpOnComplete = function(response) { // Do success stuff lpStart(); } var lpStart = function() { $.post('receive.php', {}, lpOnComplete, 'json'); }; $(document).ready(lpStart); receive.php will run until it times out (30 seconds) or gets new information. The problem is, I also need to post some data such as when a user updates their status or sends a message while the receive.php is running. However, I cannot post data until the receive.php request is finished processing. What is the best way to run 2 requests at the same time? Help is greatly appreciated. Hi, I have long polling functionality working with Google Desktop Notifications. http://blog.perplexedlabs.com/2009/0...-long-polling/ However if I have multiple tabs open then the Notification received from the server is duplicated on every tab. Is there way to prevent this from happening as it should only appear once? Thanks Hi, i'm having a problem with calling a netbeans function through an URL, that saves data to a postgresql table that has 119 columns. This is the original link: Code: http://www.mirodinero.com:8080/mirodinero-war/setMisDatos?callback=respuestaGuardarMisDatos¶m=%26usuario%3DIsa%20Mirodinero%26nivel%3D109%26gano_sal_neto%3D211113.45%26gano_sal_prof%3D2480%26gano_monet%3D0%26gano_renta_fija%3D0%26gano_renta_vble%3D0%26gano_inmuebles%3D2226.75%26gano_otros%3D2223.73%26gano_otros_ing%3D2411.12%26porc_gano_monet%3D0%26porc_gano_rentaf%3D0%26porc_gano_rentav%3D0%26porc_gano_inm%3D2%26porc_gano_otros%3D2%26porc_gano_otros_ing%3D1%26gasto_casa1%3D1306.46%26gasto_casa2%3D2402.38%26gasto_casa3%3D3999.57%26gasto_prestamo1%3D93475.58%26gasto_prestamo2%3D7325.88%26gasto_prestamo3%3D34090.9%26gasto_tarjetas%3D29443.2%26gasto_ibi%3D5670%26gasto_imp_otros%3D6780%26gasto_seg_inm%3D1320%26gasto_seg_pens%3D3451.22%26gasto_seg_vida%3D2330%26gasto_seg_plan%3D34230%26gasto_seg_medico%3D21220%26gasto_seg_coche%3D220%26gasto_luz%3D620%26gasto_agua%3D4550%26gasto_gas%3D320%26gasto_telef_f%3D22320%26gasto_telef_m%3D2350%26gasto_internet%3D20%26gasto_tv%3D3450%26gasto_hogar%3D20%26gasto_comida%3D20%26gasto_cenas_copas%3D20%26gasto_viajes%3D20%26gasto_vacaciones%3D220%26gasto_mobiliario%3D220%26gasto_ropa%3D2320%26gasto_transp%3D230%26gasto_otros%3D3620%26gasto_colegios%3D240%26gasto_univ%3D340%26gasto_master%3D2230%26gasto_otros_gastos%3D7323433%26porc_gasto_tarjetas%3D0%26porc_gasto_ibi%3D0%26porc_gasto_trib%3D0%26porc_gasto_seg_inm%3D0%26porc_gasto_seg_pens%3D0%26porc_gasto_seg_vida%3D2%26porc_gasto_seg_plan%3D2%26porc_gasto_seg_med%3D0%26porc_gasto_seg_coche%3D0%26porc_gasto_sum_luz%3D2%26porc_gasto_sum_agua%3D2%26porc_gasto_sum_gas%3D0%26porc_gasto_sum_teleff%3D0%26porc_gasto_sum_telefm%3D0%26porc_gasto_sum_int%3D0%26porc_gasto_sum_tv%3D0%26porc_gasto_nivel_hogar%3D0%26porc_gasto_nivel_comida%3D0%26porc_gasto_nivel_cenas%3D0%26porc_gasto_nivel_viajes%3D0%26porc_gasto_nivel_vacac%3D0%26porc_gasto_nivel_mob%3D0%26porc_gasto_nivel_ropa%3D20%26porc_gasto_nivel_transp%3D30%26porc_gasto_nivel_otros%3D30%26porc_gasto_colegios%3D2%26porc_gasto_univ%3D0%26porc_gasto_master%3D0%26porc_gasto_otros_gastos%3D23%26tengo_casa1%3D1231.11%26tengo_casa2%3D10000%26tengo_casa3%3D22240%26tengo_otras%3D23560%26tengo_monetario%3D1212.34%26tengo_planpensiones%3D23230%26tengo_otros%3D23330%26porc_tengo_casa1%3D1%26porc_tengo_casa2%3D0%26porc_tengo_casa3%3D2%26porc_tengo_otras%3D0%26porc_tengo_monet%3D0%26porc_tengo_plan%3D0%26porc_tengo_otros%3D0%26debo_casa1%3D4340%26debo_casa2%3D23450%26debo_casa3%3D23430%26debo_prestamo1%3D23330%26debo_prestamo2%3D6871.11%26debo_prestamo3%3D11340%26debo_tarjetas%3D61340%26porc_debo_casa1%3D30%26porc_debo_casa2%3D10%26porc_debo_casa3%3D12%26porc_debo_prestamo1%3D1%26porc_debo_prestamo2%3D12%26porc_debo_prestamo3%3D1%26porc_debo_tarjetas%3D4%26plazo_debo_casa1%3D230%26plazo_debo_casa2%3D450%26plazo_debo_casa3%3D122%26plazo_debo_prestamo1%3D3%26plazo_debo_prestamo2%3D12%26plazo_debo_prestamo3%3D4 It's 2568 characters long, so i guess that's why i get sometimes a GET undefined method in the web console. The original function does something like this: Code: var param ="&usuario="+usuario+"&nivel="+nivel+gano+porc_gano+gasto+porc_gasto+tengo+porc_tengo+debo+porc_debo+plazo_debo; var s = document.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = server_direction +"setMisDatos?callback=respuestaGuardarMisDatos¶m="+encodeURIComponent(param); var h = document.getElementsByTagName("script")[0]; h.parentNode.insertBefore(s, h); //or h.appendChild(s); and every variable in the param is written like this: Code: var plazo_debo_casa1 = (getValor("plazo_debo_casa1")); var plazo_debo_casa2 = (getValor("plazo_debo_casa2")); var plazo_debo_casa3 = (getValor("plazo_debo_casa3")); var plazo_debo_prestamo1 = (getValor("plazo_debo_prestamo1")); var plazo_debo_prestamo2 = (getValor("plazo_debo_prestamo2")); var plazo_debo_prestamo3 = (getValor("plazo_debo_prestamo3")); var plazo_debo ="&plazo_debo_casa1="+plazo_debo_casa1+"&plazo_debo_casa2="+plazo_debo_casa2+"&plazo_debo_casa3="+plazo_debo_casa3+"&plazo_debo_prestamo1="+plazo_debo_prestamo1+"&plazo_debo_prestamo2="+plazo_debo_prestamo2+"&plazo_debo_prestamo3="+plazo_debo_prestamo3; since my webpage has different parts where to put the data, i thought that a good idea would be to create smaller function for parts of variable, for example putting 30 variables and the do the callback. I did like this: Code: function guardaLoQueGano(){ var nivel = parseInt(document.getElementById('progreso_nivel_total').style.marginLeft); /*idUsusario*/ var usuario = miGetElementsByClassName('title', document.getElementById('block-user-1'))[0].innerHTML; /*gano*/ var gano_sal_neto = getValor("gano_sal_neto"); var gano_sal_prof = getValor("gano_sal_prof"); var gano_monet = getValor("gano_monet"); var gano_renta_fija = (getValor("gano_renta_fija")); var gano_renta_vble = (getValor("gano_renta_vble")); var gano_inmuebles = (getValor("gano_inmuebles")); var gano_otros = (getValor("gano_otros")); var gano_otros_ing = (getValor("gano_otros_ing")); /*gano porcentajes*/ var porc_gano_monet = getValor("porc_gano_monet"); var porc_gano_rentaf = getValor("porc_gano_rentaf"); var porc_gano_rentav = getValor("porc_gano_rentav"); var porc_gano_inm = getValor("porc_gano_inm"); var porc_gano_otros = getValor("porc_gano_otros"); var porc_gano_otros_ing = getValor("porc_gano_otros_ing"); var param = "&usuario=" + usuario + "&nivel=" + nivel + "&gano_sal_neto=" + gano_sal_neto + "&gano_sal_prof=" + gano_sal_prof + "&gano_monet=" + gano_monet + "&gano_renta_fija=" + gano_renta_fija + "&gano_renta_vble=" + gano_renta_vble + "&gano_inmuebles=" + gano_inmuebles + "&gano_otros=" + gano_otros + "&gano_otros_ing=" + gano_otros_ing + "&porc_gano_monet=" + porc_gano_monet + "&porc_gano_rentaf=" + porc_gano_rentaf + "&porc_gano_rentav=" + porc_gano_rentav + "&porc_gano_inm=" + porc_gano_inm + "&porc_gano_otros=" + porc_gano_otros + "&porc_gano_otros_ing=" + porc_gano_otros_ing; var s = document.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = direccion_servidor + "setMisDatos?callback=respuestaGuardarMisDatos¶m=" + encodeURIComponent(param); var h = document.getElementsByTagName("script")[0]; // adesso h.appendChild(s); h.parentNode.insertBefore(s, h); alert("Datos de lo que gano actualizados correctamente"); } This kind of function works perfectly, but has a big problem: it changes the values of the columns of this function, but deletes the remaining ones. How can I create different smaller function, in a way to save only on some columns without changing the others? Shall I write the netbeans function setMisDatos to make it more clear? I am trying to transform a set of two radio buttons in a stack of two labels, one blue and on gray representing, respectively, the selected radio and the unselected one. Clicking on this stack will change which of the labels is blue (and which of the radio buttons is checked). It works well but it breaks down in an ugly manner when the two labels aren't of the same width. The best way to see what I mean is to try the test page I made out on your own server or to navigate here to see the page in action. The comments in the source code and actual content explain pretty much what I am aiming for and what the problems are. Also, this is an attempt at accessibility and graceful degradation, so any remarks concerning those issues are most welcome. Code: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>word stacks</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> .stackContainer { line-height: 2em; /* Prevents the stackBottom from overlaping the second line of text found in the stack container, should there be a second line. */ } .stack { display: inline-block; /* prevent the block options to induce line breaks in your text */ line-height: 1; /* Have the 2 options verticaly close to each other */ position: relative; /* Moves the lines to be in between*/ top: 0.5em; white-space: nowrap; /* prevent line breaks */ } .stackTop, .stackBottom { display: block; /* Stack the options on top of each other */ } /* The following is extra for presentation */ .stackSelected /* Represents the chosen value */ { color: #009; } .stackUnselected /* Represents the other option */ { color: #777; } .stack { cursor: pointer; } p { margin: 3em; } </style> <?php function createWordStack($name, $value1, $value2) { // Set default values (by default, $value1 is checked and not $value2) $firstChecked = "checked=\"checked\" "; $secondChecked = ""; if(isset($_POST[$name])) // One value was chosen { if($_POST[$name] == $value2) // Not default value { $firstChecked = ""; $secondChecked = "checked=\"checked\" "; } // else fall back to default value } // else fall back to default value // Write out the html echo("<span class=\"stack\"> <label for=\"" . $name . "\"> <input type=\"radio\" name=\"" . $name . "\" value=\"" . $value1 . "\" " . $firstChecked . "/>" . $value1 . " </label> <label for=\"" . $name . "\"> <input type=\"radio\" name=\"" . $name . "\" value=\"" . $value2 . "\" " . $secondChecked . "/>" . $value2 . " </label> </span>"); } ?> <script type="text/javascript"> // It is recommended to use this function only if stacks have been created with the php function createStack and if these stacks are contained in an element of class stackContainer function makeStacks() { var forms = document.getElementsByTagName("form"); // Find all forms var nb_forms = forms.length; for(var i = 0; i < nb_forms; ++i) { if(forms[i].className.indexOf("stackContainer") != -1) // If it's a stackContainer { var spans = forms[i].getElementsByTagName("span"); // Find all spans var nb_spans = spans.length; for(var j = 0; j < nb_spans; ++j) { if(spans[j].className.indexOf("stack") != -1) // If it's a stack { var labels = spans[j].getElementsByTagName("label"); // Find all labels var nb_labels = labels.length; if(nb_labels == 2) // Only works with two labels! { labels[0].className += " stackTop"; labels[1].className += " stackBottom"; for(var k = 0; k < nb_labels; ++k) { var inputs = labels[k].getElementsByTagName("input"); // Find all inputs var nb_inputs = inputs.length; if(nb_inputs == 1 && inputs[0].type == "radio") // Only works with one radio button per label! { inputs[0].style.display = "none"; // Hide radio button labels[k].className += (inputs[0].checked)?" stackSelected":" stackUnselected"; } } } // add onclick listener to invert which radio button is checked and invert which label appears on top spans[j].onclick = function() { var labels = this.getElementsByTagName("label"); // Find all labels // We already know that there are only two labels, from earlier! for(var l = 0; l < 2; ++l) { // Invert className from stackTop to stackBottom (or vice-versa) if(labels[l].className.match(/stackSelected/)) { labels[l].className = labels[l].className.replace(/stackSelected/, "stackUnselected"); } else if(labels[l].className.match(/stackUnselected/)) { labels[l].className = labels[l].className.replace(/stackUnselected/, "stackSelected"); } } // Change which of the radios is checked var inputs = labels[0].getElementsByTagName("input"); // Find all inputs from first label // We already know that there is a single label and that it is a radio, from earlier! if(!inputs[0].checked) // If this one is not checked, check it to change which of the radios is checked { inputs[0].checked = true; } else { var inputs = labels[1].getElementsByTagName("input"); // Find all inputs from second label // We already know that there is a single label and that it is a radio, from earlier! if(!inputs[0].checked) // If this one is not checked, check it to change which of the radios is checked { inputs[0].checked = true; } // else there is something wrong as none of the radios are checked! } } } } } } } window.onload = makeStacks; </script> </head> <body> <h1>Word stacks</h1> <h2>How it works</h2> <ol> <li>PHP transforms<br /> <code><?php createWordStack("name","one","two"); ?></code><br /> into<br /> <code> <pre> <span class="stack"> <label for="name"> <input type="radio" name="name" value="one" />one </label> <label for="name"> <input type="radio" name="name" value="two" checked="checked" />two </label> </span> </pre> </code> </li> <li> javascript hides the radio buttons, applies class declarations to the labels and adds an onclick event listener to the<br /> <code> <span class="stack"> </code> </li> </ol> <h2 id="example">Example</h2> <form action="<?php echo($_SERVER['PHP_SELF'] . "#example"); ?>" class="stackContainer" method="post"> <p>Choose between <?php createWordStack("name","one","two"); ?> options.</p> <input type="submit" value="Test that the radio buttons hidden behind this still work" /> </form> <h3>print_r($_POST)</h3> <pre> <?php print_r($_POST); ?> </pre> <form class="stackContainer"> <h2>Known issues</h2> <p> This technique <?php createWordStack("no_matter","absolutely does not","does"); ?> look good with two different sizes of `words`, <?php createWordStack("no_matter2","no matter","although this depends"); ?> in which order they appear. If looks better when the longer word is above the other though. Plus, the way it breaks makes it unreadable when the longer word is on the bottom if the remainder of the text needs to span many lines. </p> <p> Another problem is when the bottom word <?php createWordStack("no_matter3","is","isn't"); ?> longer than the top word but actually consists of a single word. It cannot wrap and therefore interferes with the following text. </p> <p> <?php createWordStack("no_matter4","It really becomes unusable and quite ugly if the top word happens to wrap and span over two or more lines. Of course, the first know issue shown above is enough to understand that THIS known issue doesn't mean a thing if it is the bottom that is too long as it will span over many lines no matter what since it is limited by the width of the shorter word above..","It still works"); ?> .. and so, all in all, it is better to avoid long words altogether. </p> <p> Now, just to illustrate what I am saying above.. <?php createWordStack("no_matter5","Look at this ****!","It really becomes unusable and quite ugly if the top word happens to wrap and span over two or more lines. Of course, the first know issue shown above is enough to understand that THIS known issue doesn't mean a thing if it is the bottom that is too long as it will span over many lines no matter what since it is limited by the width of the shorter word above.."); ?> .. and so, all in all, it is better to avoid long words altogether. </p> <h2>Notes</h2> <p> At least, the next paragraph <?php createWordStack("no_matter6","isn't","is"); ?> pushed down too far. </p> <p> <?php createWordStack("no_matter7","It works","It doesn't work"); ?> when I put the stackBottom BEFORE the stackTop, so I could also call them stackChosen and stackAlternate and just change the className in order to choose one or the other. This is what the javascript used to do when you click on the stack: if the label is of class stackTop, it changes it to stackBottom, and vice-versa. Now, only the colour is changed.. </p> </form> </body> </html> I'm sorry, I know this is no way of asking a question, but I just don't know how else to phrase it. I did put much effort in making this test page as clear as possible. Thanks in advance Hi ! I would need to select whole word (same thing as when you double click a word) just by single clicking on it, or by positioning the cursor above the word(any letter of a word). Then i would need to manipulate the selection(to change selected text to some other text). The outcome would be an editor with a possibility to change selected word (to add diacritical marks to selected word). I've been googling for this for long time and can't find an answer. It can be connected to range object that is not the same in IE a firefox - but i did not manage to make it work. Or is my approach wrong ? Do you have any idea how to do this? Thank you in advance ! Tomas I want to be able to grab words from a database with javascript. How do I do that?
Help, AM I doing this right ??? So, I am trying to use a longest word function nad have to use the using the split string method to break into an array of words. I am using var parts = str.split(" "); function get_longest_word(str){ var str = document.getElementById('input_text').value;//str is the string from the input text area var parts = str.split(" "); var longest_word = ""; alert(longest_word); } so this would need to create an array, then I need to loop through the array and examine each word to see which is the longest. your help would be appreciated ! I've downloaded a simple wysiwyg script from the internet, however I want to add a wordcounter to it. The main idea is that the amount of words is refreshed every time a new character is entered. However I haven't got a clue on how to implement this, I've used javascript a lot a few years ago.. but this is out of my league. So I'm hoping someone can help me with this. The html file: Quote: <html> <head> <style type="text/css">@import url('SimpleTextEditor.css');</style> <script src="SimpleTextEditor.js"></script> <script type="text/javascript"> function countWords(){ document.form1.wordcount.value = document.form1.inputString.value.split(' ').length + '/300 words'; if (document.form1.inputString.value.split(' ').length >= 50){ document.getElementById("wordcount").style.color = "red"; }else{ document.getElementById("wordcount").style.color = "black"; } } </script> </head> <body> <form name="form1" method="post"> <div style="height:34px;width:750px;margin-bottom:5px;background-image:url('mainbar.png');background-repeat:no-repeat; "><input style="margin-top:6px;margin-left:25px;" name="wordcount" type="text" value="" size="6"></div> <textarea name="inputString" id="inputString" cols="70" rows="4" onkeyup='countWords();'></textarea> <br> <script> var ste = new SimpleTextEditor("inputString", "ste"); ste.cssFile = 'test.css'; ste.charset = 'iso-8859-1'; ste.init(); </script> <input type="submit" value="submit" onclick="ste.submit();"> </form> </body> </html> The javascript file: Quote: function SimpleTextEditor(id, objectId) { if (!id || !objectId) { alert("SimpleTextEditor.constructor(id, objectId) failed, two arguments are required"); } var self = this; this.id = id; this.objectId = objectId; this.frame; this.viewSource = false; this.path = ""; // with slash at the end this.cssFile = ""; this.charset = "iso-8859-1"; this.editorHtml = ""; this.frameHtml = ""; this.textareaValue = ""; this.browser = { "ie": Boolean(document.body.currentStyle), "gecko" : (navigator.userAgent.toLowerCase().indexOf("gecko") != -1) }; this.init = function() { if (document.getElementById && document.createElement && document.designMode && (this.browser.ie || this.browser.gecko)) { // EDITOR if (!document.getElementById(this.id)) { alert("SimpleTextEditor "+this.objectId+".init() failed, element '"+this.id+"' does not exist"); return; } this.textareaValue = document.getElementById(this.id).value; var ste = document.createElement("div"); document.getElementById(this.id).parentNode.replaceChild(ste, document.getElementById(this.id)); ste.id = this.id+"-ste"; ste.innerHTML = this.editorHtml ? this.editorHtml : this.getEditorHtml(); // BUTTONS var buttons = ste.getElementsByTagName("td"); for (var i = 0; i < buttons.length; ++i) { if (buttons[i].className == "button") { buttons[i].id = this.id+'-button-'+i; buttons[i].onmouseover = function() { this.className = "button-hover"; } buttons[i].onmouseout = function() { this.className = this.className.replace(/button-hover(\s)?/, "button"); } buttons[i].onclick = function(id) { return function() { this.className = "button-hover button-click"; setTimeout(function(){ document.getElementById(id).className = document.getElementById(id).className.replace(/(\s)?button-click/, ""); }, 100); } }(buttons[i].id); } } // FRAME if (this.browser.ie) { this.frame = frames[this.id+"-frame"]; } else if (this.browser.gecko) { this.frame = document.getElementById(this.id+"-frame").contentWindow; } this.frame.document.designMode = "on"; this.frame.document.open(); this.frame.document.write(this.frameHtml ? this.frameHtml : this.getFrameHtml()); this.frame.document.close(); insertHtmlFromTextarea(); } }; function lockUrls(s) { if (self.browser.gecko) { return s; } return s.replace(/href=["']([^"']*)["']/g, 'href="simpletexteditor://simpletexteditor/$1"'); } function unlockUrls(s) { if (self.browser.gecko) { return s; } return s.replace(/href=["']simpletexteditor:\/\/simpletexteditor\/([^"']*)["']/g, 'href="$1"'); } function insertHtmlFromTextarea() { try { self.frame.document.body.innerHTML = lockUrls(self.textareaValue); } catch (e) { setTimeout(insertHtmlFromTextarea, 10); } } this.getEditorHtml = function() { var html = ""; html += '<input type="hidden" id="'+this.id+'" name="'+this.id+'" value="">'; html += '<table class="ste" cellspacing="0" cellpadding="0">'; html += '<tr><td class="bar"><table id="'+this.id+'-buttons" cellspacing="0" cellpadding="0"><tr>'; //html += '<td><select onchange="'+this.objectId+'.execCommand(\'formatblock\', this.value);this.selectedIndex=0;"><option value=""></option><option value="<h1>">Heading 1</option><option value="<h2>">Heading 2</option><option value="<h3>">Heading 3</option><option value="<p>">Paragraph</option><option value="<pre>">Preformatted</option></select></td>'; //html += '<td><div class="separator"></div></td>'; html += '<td class="button"><img src="'+this.path+'images/bold.gif" width="20" height="20" alt="Bold" title="Bold" onclick="'+this.objectId+'.execCommand(\'bold\')"></td>'; html += '<td class="button"><img src="'+this.path+'images/italic.gif" width="20" height="20" alt="Italic" title="Italic" onclick="'+this.objectId+'.execCommand(\'italic\')"></td>'; html += '<td class="button"><img src="'+this.path+'images/underline.gif" width="20" height="20" alt="Underline" title="Underline" onclick="'+this.objectId+'.execCommand(\'underline\')"></td>'; html += '<td><div class="separator"></div></td>'; html += '<td class="button"><img src="'+this.path+'images/left.gif" width="20" height="20" alt="Align Left" title="Align Left" onclick="'+this.objectId+'.execCommand(\'justifyleft\')"></td>'; html += '<td class="button"><img src="'+this.path+'images/center.gif" width="20" height="20" alt="Center" title="Center" onclick="'+this.objectId+'.execCommand(\'justifycenter\')"></td>'; html += '<td class="button"><img src="'+this.path+'images/right.gif" width="20" height="20" alt="Align Right" title="Align Right" onclick="'+this.objectId+'.execCommand(\'justifyright\')"></td>'; html += '<td><div class="separator"></div></td>'; html += '<td class="button"><img src="'+this.path+'images/ol.gif" width="20" height="20" alt="Ordered List" title="Ordered List" onclick="'+this.objectId+'.execCommand(\'insertorderedlist\')"></td>'; html += '<td class="button"><img src="'+this.path+'images/ul.gif" width="20" height="20" alt="Unordered List" title="Unordered List" onclick="'+this.objectId+'.execCommand(\'insertunorderedlist\')"></td>'; html += '<td><div class="separator"></div></td>'; html += '<td class="button"><img src="'+this.path+'images/outdent.gif" width="20" height="20" alt="Outdent" title="Outdent" onclick="'+this.objectId+'.execCommand(\'outdent\')"></td>'; html += '<td class="button"><img src="'+this.path+'images/indent.gif" width="20" height="20" alt="Indent" title="Indent" onclick="'+this.objectId+'.execCommand(\'indent\')"></td>'; //html += '<td><div class="separator"></div></td>'; //html += '<td class="button"><img src="'+this.path+'images/link.gif" width="20" height="20" alt="Insert Link" title="Insert Link" onclick="'+this.objectId+'.execCommand(\'createlink\')"></td>'; //html += '<td class="button"><img src="'+this.path+'images/image.gif" width="20" height="20" alt="Insert Image" title="Insert Image" onclick="'+this.objectId+'.execCommand(\'insertimage\')"></td>'; //html += '<td><div class="separator"></div></td>'; //html += '<td class="button"><img src="'+this.path+'images/help.gif" width="20" height="20" alt="Help" title="Help" onclick="'+this.objectId+'.openWindow(\''+this.path+'help.html\', \'300\', \'300\')"></td>'; html += '</tr></table></td></tr>'; html += '<tr><td class="frame"><iframe id="'+this.id+'-frame" frameborder="0"></iframe></td></tr>'; html += '<tr><td class="source"><input id="'+this.id+'-viewSource" type="checkbox" onclick="'+this.objectId+'.toggleSource()"> View Source</td></tr>'; html += '</table>'; return html; }; this.getFrameHtml = function() { var html = ""; html += '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'; html += '<html><head>'; html += '<meta http-equiv="Content-Type" content="text/html; charset='+this.charset+'">'; html += '<title>SimpleTextEditor frame</title>'; html += '<style type="text/css">pre { background-color: #eeeeee; padding: 0.75em 1.5em; border: 1px solid #dddddd; }</style>'; if (this.cssFile) { html += '<link rel="stylesheet" type="text/css" href="'+this.cssFile+'">'; } html += '<style type="text/css">html,body { cursor: text; } body { margin: 0.5em; padding: 0; }</style>'; html += '</head><body></body></html>'; return html; }; this.openWindow = function(url, width, height) { var x = (screen.width/2-width/2); var y = (screen.height/2-height/2); window.open(url, "", "scrollbars=yes,width="+width+",height="+height+",screenX="+(x)+",screenY="+y+",left="+x+",top=" +y); }; this.toggleSource = function() { var html, text; if (this.browser.ie) { if (!this.viewSource) { html = this.frame.document.body.innerHTML; this.frame.document.body.innerText = unlockUrls(html); document.getElementById(this.id+"-buttons").style.visibility = "hidden"; this.viewSource = true; } else { text = this.frame.document.body.innerText; this.frame.document.body.innerHTML = lockUrls(text); document.getElementById(this.id+"-buttons").style.visibility = "visible"; this.viewSource = false; } } else if (this.browser.gecko) { if (!this.viewSource) { html = document.createTextNode(this.frame.document.body.innerHTML); this.frame.document.body.innerHTML = ""; this.frame.document.body.appendChild(html); document.getElementById(this.id+"-buttons").style.visibility = "hidden"; this.viewSource = true; } else { html = this.frame.document.body.ownerDocument.createRange(); html.selectNodeContents(this.frame.document.body); this.frame.document.body.innerHTML = html.toString(); document.getElementById(this.id+"-buttons").style.visibility = "visible"; this.viewSource = false; } } document.getElementById(this.id+"-viewSource").checked = this.viewSource ? "checked" : ""; document.getElementById(this.id+"-viewSource").blur(); }; this.execCommand = function(cmd, value) { if (cmd == "createlink" && !value) { var url = prompt("Enter URL:", ""); if (url) { this.frame.focus(); this.frame.document.execCommand("unlink", false, null); if (this.browser.ie) this.frame.document.execCommand(cmd, false, "simpletexteditor://simpletexteditor/"+url); else if (this.browser.gecko) this.frame.document.execCommand(cmd, false, url); this.frame.focus(); } } else if (cmd == "insertimage" && !value) { var imageUrl = prompt("Enter Image URL:", ""); if (imageUrl) { this.frame.focus(); this.frame.document.execCommand(cmd, false, imageUrl); this.frame.focus(); } } else { this.frame.focus(); this.frame.document.execCommand(cmd, false, value); this.frame.focus(); } }; this.isOn = function() { return Boolean(this.frame); }; this.getContent = function() { try { return unlockUrls(this.frame.document.body.innerHTML); } catch(e) { alert("SimpleTextEditor "+this.objectId+".getContent() failed"); } }; this.submit = function() { if (this.isOn()) { if (this.viewSource) { this.toggleSource(); } document.getElementById(this.id).value = this.getContent(); } }; } As you can see there are a few lines I wrote myself in the HTML file, but they didn't do the trick. |