Today I have been testing the event models from Netscape 4.8 and IE 4 to the current crop of browsers. I'd like to write a small event library similar in purpose to the Yahoo! UI event library but with less features and code. The Yahoo! event library is one of the best libraries in YUI but it still seems to me to have some confused code...that or I'm still confused.
The Yahoo! UI library focuses on using addEventListener and attachEvent. However, due to the click and dblclick bugs in Safari a long legacy event workaround is included to use a Netscape4-type event model for Safari. Something like this
var listeners = [function(event){}, function(event){}]; document.getElementById('blue').onmouseover = function(event) { for (var i=0; i<listeners.length; i++) { listeners[i](event); } };
With this above example, multiple handler functions can be fired for a single event. I imagine that this is an old trick that has been around for a long time, yes?
With all the new browsers I tested with this legacy workaround, the listener handlers can use event.stopPropogation() or event.cancelBubble=true and they work as desired. The handler functions can also use event.preventDefault() and event.returnValue=false and they too work. These seem to work because the event object passed to the handlers is a modern event object and not one from Netscape4.
My question is, if Safari needs this legacy workaround, and the legacy workaround seems to work in all the browsers that have addEventListener or attachEvent, then why bother with the addEventListener and attachEvent functions at all? Why not just use the legacy way for all browsers and all type of events.?
var img = document.createElement("img"); img.attachEvent("onclick",alert("test")); var div = document.createElement("div"); div.appendChild(img); //can't work; div.innerHTML="<-click this";
but i use attachEvent like this,it work; eg:
var img = document.createElement("img"); img.attachEvent("onclick",alert("test")); var text = document.createElement("span"); text.innerHTML="<-click this"; var div = documet.createElement("div");
div.appendChild(img); //can work div.appendChild(text);
I am trying to write a loop that will add 10 divs to the screen. Each div will have an onclick event. The function that will be called onclick requires a parameter. That parameter is dynamic based on the index of the loop. In Firefox this is no problem. However in IE I get some results that I wouldn't expect.
Here is my code:
for(var i = 0; i < 10; i++) { var linename = jsonObj.lines[i].line; var childcountid = jsonObj.lines[i].childcount; var lineid = jsonObj.lines[i].lineid;
var newdiv = document.createElement('div'); newdiv.setAttribute("id","main" + i); if (navigator.appName == "Microsoft Internet Explorer") { //************ this is the problem area ***************** newspan.attachEvent("onclick", function() {getCategories('main' + i)}); } else { newspan.setAttribute("onclick", "getCategories('main" + i + "')"); } document.getElementById('container').appendChild(n ewdiv); }
What happens is when the element is clicked the parameter being passed to getCategories is always 'main9' IE always grabs the current value of i, not the value of i at the stage of the loop that attachEvent was called.....
element.event NS3+, IE4+, dunno about opera or others
Since I'm only concerned with attaching a single event and don't care about bubbling/capturing, am I best off not using the old style of event registering to assure maxium compatibility?
The event added to the flash object (videoPlayer) or to its container (player) responds as expected in all browsers except ie. I trtied everything I could possibly think of and still can't get it work in ie. The only event that works in ie is "onactivate".
I have a cross domain iframe resizing script (using postMessage) that works perfectly in Chrome, FF, Safari and IE9 - browsers that use addEventListener I'm trying to get it to work in IE8 by adding what I thought was the right language for attachEvent, but it's not working in IE8 - I just get 'Object doesn't support this property or method' - again just in IE8.
I'm having trouble using jquery with Rails. I know there are a few plug-in solutions but I am more designer than developer and the rest of my team isn't excited about changing to a new plug-in midstream.I want to be able to write my jquery and be able to have the least impact on existing code. This means that I have to use the noconflict method. Originally I was trying to use Rails to write all my jQuery into one document ready statement but I recently found out you can have more than oneNow my problem is that my jQuery variable isn't always ready byt the time my document ready function runs. For example:
var $j = {}; $j = jQuery.noConflict(true); $j(document).ready(function(){
I copy pasted some code that hides list headings on sharepoint2007 web page.As im new to jQuery I just made 3 copies of the script.But I suspect there is a beter way to code this?Maybe put all scripts in one block. Or maybe it realy does not mater?
I'm developing an asp.net MVC app, and decided to take advantage of JQuery's great datepicker using the following code in my master page:
[Code]...
My problem is that the alert block of code never fires. When I change it to occur before the datepicker code, the alert fires but the datepicker part won't work. What am I doing wrong here?
A page I'm working on lets users open a new window, which in turn lets them send data back to the parent page to create new table rows, cells, links, etc. One of the links created is "delete", so it should delete the row that the delete link belongs to when clicked on. I can do this no problem in ff using the setAttribute('onclick',onClickEvent), but can't do this in IE. I'll show some code to make this easier to understand....
I get the error "sfHover isn't defined". What am I doing wrong? The purpose of the code would be to add a :hover (here: .sfHover) css pseudo-class on the mouseover event, to work in IE.
Suppose a HTML document has a iframe. Using javascript,I want to detect ,on load of the html document, whether the body of the iframe document is ready to be displayed.I want to be able to overwrite the the body contents (before it actullay loads) of the iframe.can I do it with jquery? say if ,HTML doc is
Normally an SVG document is loaded/parsed/interpreted inside an HTML document using an 'object' (or 'embed') element, although there are supposedly other ways too. The problem is, the SVG document must be static this way.
I want to use the DOM interface to build SVG dynamically inside an HTML document. I am guessing I can build it inside HTML within an 'object' (or maybe 'iframe'?) element.
My intentions/goals:
In Javascript, I construct an object 'embedSVG' which has properties and methods for creating valid SVG elements and setting their attributes and attribute values.
During construction, the SVG document is created with its root element. During debugging in FF 2.0 (I'll work on an MSIE-compatible format later), I am using the Mozilla DOM Inspector and comparing nodes when the 'object' element is loading a valid external SVG document, and when I am appending the child representing the SVG document created by the DOM functions.
However the child node (#document) does not specify 'svg' as the root element, but instead 'HTML'. Something is not working.
Here is the relevant code in 'ScriptTest.html' which is the HTML in which the SVG is supposed to be embedded. Below it is the relevant code for 'svglib.js' which is supposed to contain code for building the SVG dynamically.
What this code is supposed to do is load the HTML page and execute the anonymous script, and draw a navy blue-bordered yellow rectangle on a blank page. This is similar to the example in the SVG 1.1 W3C Recommendation on page 202 of the 719-page PDF.
I am getting an exception when embedSVG object placeInHTML() method is called: NS_ERROR_DOM_HIERARCHY_REQUEST_ERR. I find in DOM Inspector in spite of or after the exception that a document is placed as a child of the object element, but it is HTML, with a default 'head', 'title', 'body' elements placed.
Determine what the previous page was that the user was viewing, even if the user arrived at my site by through the use of a browser function (history, location bar, refresh, etc.). Is this possible?
I'm not wuite sure how document.history functions - what degree of privacy is given to the user and to what extent can web pages get URLs from the user's history?
I am trying to make a function run if the mouse is moved over the document but when using the object onmousemove it seems to run the code even if the mouse is still over then document, how can I make it so if the mouse is over the document but isn't moving then don't run the code but once the mouse moves run the code? This is the code I made to handle the mouse move collections.
[Code]..
But with this code it runs even when the user doesn't move their mouse and the notification box pops up every second as the code seems to think a still mouse is a moving mouse.
I was thinking about having a run once system but that would mean if the mouse moves it runs once and then if the mouse moves again the code will not run as it has already ran before.
I want to switch a big function from a document.onkeydown = function to a document.onkeypress = function, or vice versa depeding on the type of browser.
However it is quite a big function so it's pretty much out of the question to have it appear in full twice.
Any ideas how to change the target event (onkeydown/onkeypress) without writing the whole function twice?
I am working on creating a document where you check a bunch of checkboxes to select what to include, then click on a button. A function then opens a new window and writes the HTML code to run scripts in .js files to populate the page. Code:
I have been searching for a way to trap changes done to the document object (mainly by the function document.write();).
Example of code that doesn't work:
function myFunction() { ed.document.onchange = doFunction(document.body.innerHTML); ed.document.open(); ed.document.write('Hello'); ed.document.close(); }
function do_function(body) { alert(body); }
It only fires when the page loads, not when I change the text. You are free to use any event that works, but i think onchange was the one to fit this problem. The alert will write the initialpage, but will never write the tekst 'Hello' that is the new change.
Any javagurus out there know a solution to pick up any fired events triggered by document.write();
I am trying to write a bunch of text onto a new document using document.write() and somehow need to format it to include line breaks.
For example: Code JavaScript: document.write(Line 1); document.write(Line 2);
I have tried including and it does not work. I have also tried document.writeln() and that also does not work. From what I have found on the Internet, one (if not both) of those methods should have worked.
I have created a servlet that does nothing more than create a XML file.i have got some JQuery code that reloads the servlet to get the XML data.This works fine and i am able to load the data i want, the problem i have is that when the data is loaded to the jsp page it displays [object Document] in front of my output.
does anyone know of any javascript method that does the same job as document.write(), but not necessarily at the end of the document? For instance, insert some text inside an element that has a specific ID tag?