May 12, 200619 yr Hi, i have a problem. I've just started using the XSLT availablity from filemaker and now i would like to use some javascript inside my xslt. As filemaker, xml, xslt is not my background this is causing me some frusticleastion. Problem is, it don't work for toffee. I've tried some of the online exmaples etc. But have had no luck. I can get it to work if i use ONE javascript function. But when i need to pass one value into another function nothing happens. I have >< symbols in it also and can not get nothing to work. I am now fed-up. Can anyone provide a short or long example of what is the best approach to using javascript inside my XSLT that uses more than one function and escape all the characters the xslt does not like. This would be most greatfull. I will buy you a beer also. Cheers Edited May 12, 200619 yr by Guest
May 13, 200619 yr Can you post some code? The problems mostly are connected with the use of apostrophes.
May 13, 200619 yr Author Hi Martin, Snippet of code as follows: This is the javascript section var endDate = "05/9/2006" i = 0; function calcJulian(isDate){ gregDate = new Date(isDate); year = gregDate.getFullYear(); month = gregDate.getMonth()+1; day = gregDate.getDate(); nDay[i++] = gregDate.getDay(); A = Math.floor((7*(year+Math.floor((month+9)/12)))/4); B = day+Math.floor((275*month)/9); isJulian = (367*year)-A+B+1721014; return isJulian } function countDays(isBase) { isValid = true; isToday = (isBase); currDate = calcJulian(endDate); baseDate = calcJulian(isToday); daysApart = currDate-baseDate; if (daysApart< 0) {isValid = false} if (nDay[1] == 0 || nDay[1] == 6){isValid = false} if (isValid) { workDays = daysApart-(parseInt(daysApart/7)*2); if (nDay[0] < nDay[1]){workDays = workDays-2} } if (!isValid){alert('Invalid Start Date')} } This is the section when i call the javascript: Edited May 13, 200619 yr by Guest
May 13, 200619 yr Author PS. I've been having a few issues posting the above snippet but it looks ok now. I'd forgot to mention. I'd been trying to escape the <> characters etc. But with no luck. So i've pasted the raw javacript code i am trying to get to work. Basically its a routine to work out the number of days between to date values, that omits the weekends. And only counts the number of working days in the week. I could not seem to find any xslt routine that could do that for me, so thats why i turned to javascript. Thanks again.
May 15, 200619 yr What data type is $_field-nameSD, a date or a number? If it is a date, then you may use the following: .... Next, in your JavaScript function, there is some strange behaviour depending on the browser: You initialize i=0; (BTW, rather use var i=0; IE does not seem to like if JavaScript variables are introduced without var declaration). Later, you set nDay[i++] = gregDate.getDay(); FireFox interprets that correctly, with nDay[0] = day after first function call and nDay[1] = day after second function call Safari has nDay[0] = undefined, nDay[1] = day after second function call (seems to be a bug of Safari). BTW: You can debug your JavaScript with the JavaScript console in Firefox or in Safari. With IE you need to download the Script debugger from Microsoft: http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp
May 15, 200619 yr Another mistake: nDay is only defined locally within function calcJulian. The function countDays knows nothing about the declaration of nDay.
May 16, 200619 yr Author Wow, Thanks for that Martin, It's amazing when you have a fresh pair of eyes on the job. Sorry for my sloppy javascript code. Also thanks for the XSLT option i'll give that a go also. Many Thanks
May 16, 200619 yr Author Hi I've now got the javascript working within my xslt, but i need your advice again. It appears i now have a problem calling this function. It works if i use the onclick command to call it. But i just want it to get called as the xslt code literates thourgh the records. Just like countdays(date1,date2) rather than the onclick="countdays(date1,date2). Sorry to be a pain, any idea? Edited May 16, 200619 yr by Guest
May 16, 200619 yr Within the tags of your HTML, add window.onload=function() { countdays(date1,date2); } Or if the dates are dynamic use xsl:value-of instead of xsl:text and of course the concat() function. The JavaScript will still be executed browser-side. Another way is to extend your XSLT according to p. 76 of the FMSA CWP Guide for server-side execution of the script.
Create an account or sign in to comment