Here I go
Joachim Lundgren wrote:
> [ This discussion is continued from DynAPI-Help. The last thread name was "NS4
>link/event cancelling [Was: (no subject)]" ]
>
> These are the changes I suggest to mouse.js/DynMouseEvent.EventMethod().
> Tested on: IE5.5 SP1, NS4.77 & Mozilla 0.9.2, all on Win2000 SP2
>
> At the top:
> --------------------------------------------------------------------------------
> DynMouseEvent.EventMethod=function(e) {
> var dynobject=this.lyrobj;
> if(is.def) {
> if(is.ie) var e = dynobject.frame.event
> e.cancelBubble = true;
>
> if (DynAPI.wasDragging && e.type=="click") {
> DynAPI.wasDragging=false;
> return false; // <- was true before
> }
> }
> --------------------------------------------------------------------------------
>
> At the bottom it ended like this:
>
> --------------------------------------------------------------------------------
> // Click on links and form elements
> if (e && e.target.handleEvent && e.target!=this)
>e.target.handleEvent(e);
> }
>
> return evt.browserReturn;
> }
> --------------------------------------------------------------------------------
>
> Change that to read this instead:
>
> --------------------------------------------------------------------------------
> // Click on links and form elements
> if(e && e.target.handleEvent && e.target!=this && (e.target.handleEvent(e)
>== false))
> evt.browserReturn = false;
> }
> else {
> if(e.preventDefault && !evt.browserReturn)
> e.preventDefault();
> }
> // If Internet Explorer AND evt.browserReturn is false,
> // OR _any other browser_, THEN return evt.browserReturn.
> // [So in IE either return false or nothing at all. This allows user
> // code (<A onclick> for example) to set e.returnValue (in IE) or return
> // true/false. If evt.browserReturn is false it means we're to
> // disable the default action, no matter what.]
> if(!is.ie || evt.browserReturn==false)
> return evt.browserReturn;
> }
> --------------------------------------------------------------------------------
>
> These changes would allow event handlers (the "A onclick"-handler in the example) to
>cancel following the link, regardless of whether it's draggable or not.
>
> Example webpage (please check the non-draggable case too by commenting the
>DragEvent.enableDragEvents line):
> --------------------------------------------------------------------------------
> DynAPI.setLibraryPath("/dynapi/src/lib/");
> DynAPI.include("dynapi.api.*");
> DynAPI.include("dynapi.event.*")
> var num=0;
> DynAPI.onLoad = function() {
> myLayer = new DynLayer(null, 0,50,100,100,"red");
> DragEvent.enableDragEvents(myLayer);
> myLayer.setHTML('<A href="misc.html" onclick="alert(1);return
>false">click</A>');
> myListener = new EventListener();
> myListener.onclick = function(e) {
> DynAPI.document.setBgColor("#808080");
> window.status = ++num;
> }
> myLayer.addEventListener(myListener);
> DynAPI.document.addChild(myLayer)
> }
> --------------------------------------------------------------------------------
>
> Note: The results of dragging the link isn't consistant among the browsers. The
>changes above doesn't fix this. It can be solved, but the easiest work-around I think
>would be to use a cover-layer on top of the link.
>
> /Lunna
>
> _______________________________________________
> Dynapi-Dev mailing list
> [EMAIL PROTECTED]
> http://lists.sourceforge.net/lists/listinfo/dynapi-dev
_______________________________________________
Dynapi-Dev mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/dynapi-dev