Tag Archives: CSS

Google Chart Histogram Chart Pie Chart Dynamic Pollster Tutorial

More refinements onto yesterday’s Google Chart Histogram Chart Pie Chart Mobile Tooltips Tutorial sees us … allowing for negative integer and any non-integer Histogram numeric values and scenarios of ranges with a count of zero (in “function infillit”) … var iminis=0 , maxthere=false, imaxis=0 , doitanyway=false; // … iminis=eval(” + ustg[jut].split(‘%20’)[0]); imaxis=-9999999; maxthere=false; if (ustg[jut].indexOf(‘%20to%20’) != -1) { maxthere=true; imaxis=eval(” + ustg[jut].split(‘%20to%20’)[1].split(‘%’)[0].split(‘,’)[0]); } // … if (eval(” + decodeURIComponent(pbitsare[iut]).split(‘]’)[0].replace(‘+’,”)) >= eval(” + iminis) && (!maxthere || eval(” + decodeURIComponent(pbitsare[iut]).split(‘]’)[0].replace(‘+’,”)) < eval(” + imaxis))) { // … is in this one’s range now that … tsuffix=’ to ‘ + eval(thisones[0] – 1); … replaced with tsuffix=’ to ‘ + eval(thisones[0] – 0); … up earlier in code if (tts[eval(-1 + jut)].indexOf(‘ via ‘) == -1) { doitanyway=true; // … update relevant tooltip with ” via ” bit involving first relevant histogram numerical value } else { // … update relevant tooltip with another histogram numerical value } // … if (tts[eval(-1 + jut)].indexOf(‘<a’) != -1) { // … update relevant tooltip } else if (doitanyway) { // … update relevant tooltip for ones with a count of zero } integrating with the Dynamic Pollster (avoiding popup windows when tooltips involved) … if (ans.substring(0,1).toLowerCase() == ‘p’ if (oblurb != null && 1 == 2) { ohref=urlgo; //,ans.substring(0,1).toLowerCase(); window.open(ohref,’_blank’,’top=20,left=20,width=800,height=660′); } else { ohref=maybeothers(urlgo,ans.substring(0,1).toLowerCase()); // use of maybeothers adds in tooltips for Pie Chart HTML form method=POST leaving ohref as blank if (ohref != ”) { if (oblurb != null) { // Dynamic Pollster for short URL scenarios (unlikely with tooltips) window.open(ohref,’_blank’,’top=20,left=20,width=800,height=660′); } else { location.href=ohref; } } } } tiny CSS styling Pie Chart changes as per … <style> div.google-visualization-tooltip { opacity:95%; width:200px; border-radius: 15%; background:linear-gradient(180deg, rgb(255,175,189), rgb(255,195,160)); filter: drop-shadow(-3px -2px 4px rgba(68,68,238,0.6)); } div.google-visualization-tooltip iframe { border-radius: 5%; } </style> … that latter now an issue because the tooltips tip the web application out from the previous popup window thinking to, instead, opening new web browser windows navigated to via an HTML form method=POST arrangement. We hope the overall result of this is a more aesthetically pleasing tooltip look with the Pie Chart, so that a changed pie_chart.php Pie Chart can be called by the changed histogram_chart.php Histogram Chart, and say … Back at ya, Kyiv. Previous relevant Google Chart Histogram Chart Pie Chart Mobile Tooltips Tutorial is shown below. When using the web application of yesterday’s Google Chart Histogram Chart Pie

Posted in eLearning, Event-Driven Programming, Tutorials | Tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a comment

Google Chart Histogram Chart Pie Chart Mobile Tooltips Tutorial

When using the web application of yesterday’s Google Chart Histogram Chart Pie Chart CSS Tooltips Tutorial, that being the Google Charts Histogram Chart interfacing to the Pie Chart you never see a Javascript prompt or alert popup window. Well, this has implications for the architecture of the navigation flows within the web application, meaning that when we came to test on an iPad today, we’d forgotten to account for it. Apologies for that, as we needed to, at document.body onload … <?php echo ” var documentURL=document.URL, pardata = (location.search.split(‘data=’)[1] ? location.search.split(‘data=’)[1].split(‘&’)[0] : ”); if (isset($_POST[‘data’])) { echo “\n pardata=\”” . str_replace(“+”,”%20″,urlencode($_POST[‘data’])) . “\”; \n”; } if (documentURL.indexOf(‘?’) == -1) { documentURL=document.URL + ‘?title=” . urlencode(str_replace(“+”,” “,$_POST[‘title’])) . ‘&task=’ . urlencode($_POST[‘task’]) . ‘&onclick=y&desc=’ . urlencode($_POST[‘desc’]) . “&data=’ + pardata; } if ((” + document.referrer).indexOf(‘/PieChart’) == -1 && (documentURL + ‘&’).toLowerCase().indexOf(‘&val1=p&’) != -1) { selectevent(‘p’); } “; ?> … in other words, if we navigate to a Histogram Chart from a Histogram Chart (in which the user selected “P” for “interface to a Pie Chart”), take the logic of the web application to where we left off (in the non-mobile web application workflow (where “Javascript popup windows” are (not Claytons) “Javascript popup windows”)). We added some transparency to the Pie Chart’s tooltip’s HTML iframe (as occurs when interfaced to a calling Histogram Chart) containing a scaled down version of the calling Histogram Chart, to aid with context further … <?php echo ” if (tts[eval(-1 + jut)].indexOf(‘<a’) != -1) { tts[eval(-1 + jut)]=tts[eval(-1 + jut)].replace(‘ </P>’, ‘</a>&nbsp;&#10549;</font><br><style> iframe { transform:scale(0.5);transform-origin:0px 0px; } </style><iframe src=’ + documentURL.replace(‘&val1=’,’&jvla=’).replace(/\+/g,’%20′) + ‘ style=width:800px;height:620px;opacity:0.8;></iframe></P>’); } “; ?> We hope the overall result of this is a more aesthetically pleasing tooltip look with the Pie Chart for mobile users, so that an unchanged Pie Chart can be called by the changed histogram_chart.php Histogram Chart, and say … You’re sooooooooo mature. Previous relevant Google Chart Histogram Chart Pie Chart CSS Tooltips Tutorial is shown below. Today’s work is a combination of … CSS styling at the Pie Chart end … <style> div.google-visualization-tooltip { border-radius: 15%; background:linear-gradient(180deg, rgb(255,175,189), rgb(255,195,160)); filter: drop-shadow(-3px -2px 4px rgba(68,68,238,0.6)); } div.google-visualization-tooltip iframe { border-radius: 5%; } </style> tinkering with content sent at the Histogram Chart end involves … for (jut=1; jut<ustg.length; jut++) { iminis=eval(” + ustg[jut].split(‘%20’)[0]); imaxis=-1; if (ustg[jut].indexOf(‘%20to%20’) != -1) { imaxis=eval(” + ustg[jut].split(‘%20to%20’)[1].split(‘,’)[0]); } cntsare.push(eval(” + ustg[jut].split(‘,’)[1].split(‘]’)[0])); if (jut == 1) { tts[0]=’,’ +

Posted in eLearning, Event-Driven Programming, iOS, Tutorials | Tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a comment

Google Chart Histogram Chart Pie Chart CSS Tooltips Tutorial

Today’s work is a combination of … CSS styling at the Pie Chart end … <style> div.google-visualization-tooltip { border-radius: 15%; background:linear-gradient(180deg, rgb(255,175,189), rgb(255,195,160)); filter: drop-shadow(-3px -2px 4px rgba(68,68,238,0.6)); } div.google-visualization-tooltip iframe { border-radius: 5%; } </style> tinkering with content sent at the Histogram Chart end involves … for (jut=1; jut<ustg.length; jut++) { iminis=eval(” + ustg[jut].split(‘%20’)[0]); imaxis=-1; if (ustg[jut].indexOf(‘%20to%20’) != -1) { imaxis=eval(” + ustg[jut].split(‘%20to%20’)[1].split(‘,’)[0]); } cntsare.push(eval(” + ustg[jut].split(‘,’)[1].split(‘]’)[0])); if (jut == 1) { tts[0]=’,’ + String.fromCharCode(34) + ‘<P onmouseover=console.log(54);’ + ‘>&#931;: ‘.substring(0,1) + cntsare[eval(-1 + jut)] + ‘&nbsp;(‘ + eval(eval(eval(” + cntsare[eval(-1 + jut)]) * 100) / totnum).toFixed(1) + ‘%) </P>’ + String.fromCharCode(34); } else { tts.push(‘,’ + String.fromCharCode(34) + ‘<P onmouseover=console.log(354);’ + ‘>&#931;: ‘.substring(0,1) + cntsare[eval(-1 + jut)] + ‘&nbsp;(‘ + eval(eval(eval(” + cntsare[eval(-1 + jut)]) * 100) / totnum).toFixed(1) + ‘%) </P>’ + String.fromCharCode(34)); } } for (iut=1; iut<pbitsare.length; iut++) { for (jut=1; jut<ustg.length; jut++) { iminis=eval(” + ustg[jut].split(‘%20’)[0]); imaxis=-1; if (ustg[jut].indexOf(‘%20to%20’) != -1) { imaxis=eval(” + ustg[jut].split(‘%20to%20’)[1].split(‘,’)[0]); } if (eval(” + pbitsare[iut].split(‘]’)[0].replace(‘+’,”)) >= eval(” + iminis) && ((” + imaxis) == ‘-1’ || eval(” + pbitsare[iut].split(‘]’)[0].replace(‘+’,”)) <= eval(” + imaxis))) { if (tts[eval(-1 + jut)].indexOf(‘ via ‘) == -1) { tts[eval(-1 + jut)]=tts[eval(-1 + jut)].replace(‘ </P>’, ‘ via <font size=1><a target=_blank title=Histogram href=’ + document.URL + ‘>’ + pbitsare[iut].split(‘]’)[0].replace(‘+’,”) + ‘ </P>’); } else { tts[eval(-1 + jut)]=tts[eval(-1 + jut)].replace(‘ </P>’, ‘ ‘ + pbitsare[iut].split(‘]’)[0].replace(‘+’,”) + ‘ </P>’); } } } } for (jut=1; jut<ustg.length; jut++) { if (tts[eval(-1 + jut)].indexOf(‘<a’) != -1) { tts[eval(-1 + jut)]=tts[eval(-1 + jut)].replace(‘ </P>’, ‘</a>&nbsp;&#10549;</font><br><style> iframe { transform:scale(0.5);transform-origin:0px 0px; } </style><iframe src=’ + document.URL + ‘ style=width:800px;height:620px;></iframe></P>’); } if (eval(” + tts.length) >= jut) { utgo=utgo.replace(ustg[jut], ustg[jut].replace(‘,’, ‘,’ + String.fromCharCode(34) + encodeURIComponent(tts[eval(-1 + jut)].substring(2,eval(-1 + tts[eval(-1 + jut)].length))) + String.fromCharCode(34) + ‘,’)); } } utgo=utgo.replace(/\]\,\[/g, ‘]%20,%20[‘).replace(/\,\[/g, ‘,%20[‘).replace(/\[\%27/g,'[~’).replace(/\%27\,/g,’~,’); tts=[”]; … on top of the Google Charts tooltip HTML of yesterday’s Google Chart Histogram Chart Pie Chart HTML Tooltips Tutorial. We hope the overall result of this is a more aesthetically pleasing tooltip look with the Pie Chart, so that a changed pie_chart.php Pie Chart can be called by the changed histogram_chart.php Histogram Chart, and say … Back at ya. Previous relevant Google Chart Histogram Chart Pie Chart HTML Tooltips Tutorial is shown below. Yesterday’s Google Chart Histogram Chart Pie Chart Tooltips Tutorial got us going with tooltips, but with a limited “just text” feel to them, but if you have done some

Posted in eLearning, Event-Driven Programming, Tutorials | Tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a comment

AppML Acronyms Hierarchy Tutorial

Yesterday’s AppML Acronyms Tutorial works in an HTML table by appml-repeating table cell content elements via an array. What happens if your JSON contains arrays within arrays, like our Acronym data’s “vars” members … [{“sf”: “BHP”, “lfs”: [{“lf”: “benign prostatic hyperplasia”, “freq”: 12, “since”: 1992, “vars”: [{“lf”: “benign prostatic hyperplasia”, “freq”: 8, “since”: 1992}, {“lf”: “Human benign hyperplastic prostate”, “freq”: 2, “since”: 1994}, {“lf”: “Benign prostatic hyperplasia”, “freq”: 1, “since”: 1995}, {“lf”: “benign prostate hyperplasia”, “freq”: 1, “since”: 1995}]}, {“lf”: “tert-butyl hydroperoxide”, “freq”: 11, “since”: 1986, “vars”: [{“lf”: “tert-butyl hydroperoxide”, “freq”: 6, “since”: 1994}, {“lf”: “t-butyl hydroperoxide”, “freq”: 3, “since”: 1986}, {“lf”: “Tert-butyl hydroperoxide”, “freq”: 1, “since”: 1993}, {“lf”: “tert.-butyl hydroperoxide”, “freq”: 1, “since”: 2003}]}, {“lf”: “N-nitrosobis (2-hydroxypropyl) amine”, “freq”: 7, “since”: 1985, “vars”: [{“lf”: “N-nitrosobis (2-hydroxypropyl) amine”, “freq”: 6, “since”: 1985}, {“lf”: “N-Nitrosobis (2-hydroxypropyl) amine”, “freq”: 1, “since”: 1993}]}, {“lf”: “benign hypertrophy of the prostate”, “freq”: 6, “since”: 1988, “vars”: [{“lf”: “benign hypertrophy of the prostate”, “freq”: 4, “since”: 1988}, {“lf”: “Benign hypertrophy of the prostate”, “freq”: 2, “since”: 2003}]}]}] ? Well, we just surmised (a table template like) … <table appml-data=”appis”> <tr> <th>Meaning</th> <th>Frequency</th> <th>Since</th> <th>Subs</th> </tr> <tr appml-repeat=”records”> <td>{{lf}}</td> <td>{{freq}}</td> <td>{{since}}</td> <td>{{vars}}</td> </tr> </table> … might be a good start. It was, the AppML leaving behind comma separated [object Object] hardcodings for the submembers of the “vars” array members, and then PHP code like … <?php $json_output = json_decode(str_replace(“$@$”, “”, str_replace(“}]}]}]”, “}]}]}”, str_replace(“$@$[“,””, (“$@$” . $pageContent))))); // ,true); $hstuff = str_replace(“none;”, “block;”, str_replace(“></th>”, “>   ” . $selname . ”     </th>”, $uc)); for ($i=0; $i<sizeof($json_output->lfs); $i++) { if (strpos($hstuff, ‘>’ . $json_output->lfs[$i]->lf . ‘</td’) === false) { if ($done == “n”) { for ($ii=1; $ii<sizeof($biarray); $ii+=2) { if (strtoupper($json_output->lfs[$i]->lf) == strtoupper($biarray[$ii])) $done = “Y”; } } $subhstuff=””; $shs=””; if ($json_output->lfs[$i]->vars) { for ($iij=0; $iij<sizeof($json_output->lfs[$i]->vars); $iij++) { if ($subhstuff == “”) { $subhstuff=”<br><table><TBODY></TBODY></table>”; $shs=”[object Object]”; } else { $shs.=”,[object Object]”; } $subhstuff=str_replace(“</TBODY>”, “<tr><th>” . ($iij + 1) . “</th><th class=thlink>” . $json_output->lfs[$i]->vars[$iij]->lf . “</th><th>” . $json_output->lfs[$i]->vars[$iij]->freq . “</th><th>” . $json_output->lfs[$i]->vars[$iij]->since . “</th></tr></TBODY>”, $subhstuff); } if ($fillin == “”) { $fillin=” setTimeout(alat, 5000); \n } \n function alat() { \n var dai=document.getElementsByTagName(‘table’); ” . “\n”; } $fillin.=” dai[0].innerHTML=dai[0].innerHTML.replace(/” . ‘\”‘ . “/g,”).replace(\”” . $shs . “\”, \”” . str_replace(“<br>”, “”, $subhstuff) . “\”); ” . “\n”; } $hstuff = str_replace(“</tbody></table>”, “<tr class='” . $trclass . “‘><td>” . ($i + 1) . “.<details><summary>” . sizeof($json_output->lfs[$i]->vars) . “</summary>” . str_replace(” class=\”thlink\””, “”, str_replace(” class=thlink”,

Posted in eLearning, Tutorials | Tagged , , , , , , , , , , , , , , , , , , , | Leave a comment

AppML Acronyms Tutorial

After yesterday’s AppML Primer Tutorial we went looking for an apt inhouse web application that allows an interface to these new AppML framework concepts. Do you remember Acronyms Lookup Wikipedia Tutorial? We first thought we’d be working in the client half of this web application but found it was much better to just add a new input element (ie. textbox) placeholder, just, here, and do the bulk of the changes needed in the serverside PHP that is Ajax called from the client HTML. What most pointed us in the right direction here, with the code, was AppML Data whereby that “customers.js” web server JSON file arrangement of yesterday, can be localized via PHP (where $pageContent is JSON results for acronym query from third parties, thanks and $appml is true for user flagging they want the AppML output report look) … <?php if ($appml) { $mytitle=$selname; // incoming acronym to look up $aml=”<!DOCTYPE html> <html lang=\”en-US\”> <link rel=\”stylesheet\” href=\”style.css\”> <title>Customers</title> <script src=\”//www.w3schools.com/appml/2.0.3/appml.js\”></script> <body> <h1>” . $mytitle . “</h1> <h4>Thanks to <a target=_blank title=’AppML via W3Schools, thanks’ href=’//webdevable.com/w3schools/appml/appml_howto.html’>W3Schools</a></h4> <table appml-data=’appis’> <tr> <th>Meaning</th> <th>Frequency</th> <th>Since</th> </tr> <tr appml-repeat=\”records\”> <td>{{lf}}</td> <td>{{freq}}</td> <td>{{since}}</td> </tr> </table> <script> var appis=” . (str_replace(‘”JUNKJUNK’,”‘”,str_replace(‘”sf”: “‘ . $selname . ‘”, “lfs”: ‘, ‘”records”:’, str_replace(“\n”,””,str_replace(“}]}]}]”, “}]}]}”,substr($pageContent,1)) ))) ) . “; </script> </body> </html> “; echo $aml; exit; } ?> So, you can check out the PHP changed getacronymdata.php called by the minor changes of getacronymdata.htm‘s acronym web application to see (or try) this all for yourself. Previous relevant AppML Primer Tutorial is shown below. There are hundreds and perhaps thousands of Framework type applications out there that create HTML output. Some set to a Framework the handling of data, and today we’re trying out one called AppML where we are going to use the W3Schools Two Step first tutorial as per … AppML Explained: <script src=”https://www.w3schools.com/appml/2.0.3/appml.js”> adds AppML to your page. appml-data=”customers.js” connects AppML data (customers.js) to an HTML element (<table>>). In this case we have used a JSON file: customers.js appml-repeat=”records” repeats an HTML element (<tr>) for each item (records) in a data object. The {{ }} brackets are placeholders for AppML data. Tokenizing this way (or you could call it substituting) gels with our thinking nearly as much as adding global data attributes as ways to make your HTML more intelligent, and more like that “protocol with glasses”, XML. All it took to create today’s “pretty swish” table of

Posted in Ajax, eLearning, Tutorials | Tagged , , , , , , , , , , , , , , | Leave a comment

AppML Primer Tutorial

There are hundreds and perhaps thousands of Framework type applications out there that create HTML output. Some set to a Framework the handling of data, and today we’re trying out one called AppML where we are going to use the W3Schools Two Step first tutorial as per … AppML Explained: <script src=”https://www.w3schools.com/appml/2.0.3/appml.js”> adds AppML to your page. appml-data=”customers.js” connects AppML data (customers.js) to an HTML element (<table>>). In this case we have used a JSON file: customers.js appml-repeat=”records” repeats an HTML element (<tr>) for each item (records) in a data object. The {{ }} brackets are placeholders for AppML data. Tokenizing this way (or you could call it substituting) gels with our thinking nearly as much as adding global data attributes as ways to make your HTML more intelligent, and more like that “protocol with glasses”, XML. All it took to create today’s “pretty swish” table of a web application was … index.html HTML style.css CSS customers.js JSON … that JSON serving as a flat file data source. Interesting, huh?! If this was interesting you may be interested in this too.

Posted in eLearning, Tutorials | Tagged , , , , , , , , , | Leave a comment

Javascript Oninvalid Pattern setCustomValidity Event Form Validations Tutorial

In most of our mathematical educations, the odds are we won’t ever have to prove anything major mathematically, rather we just learn what has already been proved. But a lot of us envisage proving something mathematically as we trot off to school. The closest I got in my high school mathematics to proving anything was when we studied “mathematical induction” for a day or two. I was pretty impressed with the idea of it, in broad brush terms … Prove it for the first case. Prove it for the next case. Prove it for the nth case. … and you’ve proved it! Of course, looking back, this probably only applies to a certain subset of “things” (eg. positive integers), but I was probably off to the loo when that dampener was explained by the teacher, so I’ve come to the belief that the dogs’ breakfast can be “mathematically inducted” … Nala likes the cheese. Luna likes the cheese. nessie likes the cheese (and so do all the dogs whose names start with an “n” to my mind). And so, onto the “prove it for the first case” start yesterday’s Javascript Oninvalid Event Form Validation Pattern setCustomValidity Tutorial represented, we’ve written another (this time really pared down) “proof of concept” live run calling on a “second draft” external Javascript pattern_test.js you can try for yourself below … Previous relevant Javascript Oninvalid Event Form Validation Pattern setCustomValidity Tutorial is shown below. To improve on yesterday’s HTML Oninvalid Event Form Validation Pattern setCustomValidity Tutorial we immediately thought “genericization”. And one approach to “force the hand”, so to speak, regarding genericization is to … take the original HTML (including inhouse Javascript and inhouse CSS) … and at least be capable of hiving off most of its code (though we just ‘add’ today, the point being though, we could have a very minimal HTML source code footprint if we had not wanted to compare both techniques) … into … new external Javascript called pattern_test.js … called by HTML via something like … <script type=’text/javascript’ src=’pattern_test.js?theelementid=csvlist’ defer></script> … where the “csvlist” is the ID of a textbox you want validated via a “comma separated positive integer list” pattern (default [0-9,]*) …working with the parent HTML design … <form id=ejmyform method=GET data-onsubmit=”return ejosb(this);” action=./pattern_test.htm> <input type=”text” style=”width:80%;” data-onblur=”document.getElementById(‘ejfsub’).click();” data-name=”csvlist” id=”csvlist” data-pattern=”[0-9,]*” value=”” data-placeholder=”Please enter a comma separated positive integer list (where red dashed border flags invalid entry)”

Posted in eLearning, Event-Driven Programming, Tutorials | Tagged , , , , , , , , , , , , , , , , | Leave a comment

Javascript Oninvalid Event Form Validation Pattern setCustomValidity Tutorial

To improve on yesterday’s HTML Oninvalid Event Form Validation Pattern setCustomValidity Tutorial we immediately thought “genericization”. And one approach to “force the hand”, so to speak, regarding genericization is to … take the original HTML (including inhouse Javascript and inhouse CSS) … and at least be capable of hiving off most of its code (though we just ‘add’ today, the point being though, we could have a very minimal HTML source code footprint if we had not wanted to compare both techniques) … into … new external Javascript called pattern_test.js … called by HTML via something like … <script type=’text/javascript’ src=’pattern_test.js?theelementid=csvlist’ defer></script> … where the “csvlist” is the ID of a textbox you want validated via a “comma separated positive integer list” pattern (default [0-9,]*) …working with the parent HTML design … <form id=ejmyform method=GET data-onsubmit=”return ejosb(this);” action=./pattern_test.htm> <input type=”text” style=”width:80%;” data-onblur=”document.getElementById(‘ejfsub’).click();” data-name=”csvlist” id=”csvlist” data-pattern=”[0-9,]*” value=”” data-placeholder=”Please enter a comma separated positive integer list (where red dashed border flags invalid entry)” data-title=”Please enter a comma separated positive integer list (where red dashed border flags invalid entry)”></input> <input type=submit id=ejfsub value=Validate></input></form> To improve the “genericity” aspects to this we allow for both … a textbox in a form to have a visible submit button that sets off form oninvalid logics at that form onsubmit event … or … a textbox is not in a form and the tabbing out of it with an invalid value causes CSS to show a red dashed border (as flagged to the user initially) with or without buttons of any sort Though we do not use it in today’s “second draft” “proof of concept” pattern_test.htm‘s live run, the user could specify their own pattern via a &pattern=[textboxPattern], which you can try below … Previous relevant HTML Oninvalid Event Form Validation Pattern setCustomValidity Tutorial is shown below. The recent HTML Oninvalid Event Form Validation Primer Tutorial taught us that … in the client (ie. HTML and Javascript and CSS) side of the web application wooooorrrrrlllllddd it is best to involve a form … as much as anything to get to involve … oninvalid event for a textbox or other user interaction HTML element … and today we do not involve with this … required attribute … opening the door, that way, to involving a textbox’s combination of … pattern attribute … <input type=”text” onblur=”document.getElementById(‘fsub’).click();” name=”integerlist” id=”integerlist” pattern=”[0-9,]*” value=”” placeholder=”Please enter a comma separated positive integer list” title=”Please

Posted in eLearning, Event-Driven Programming, Tutorials | Tagged , , , , , , , , , , , , , , | Leave a comment