First of all, this suite is amazing! Now that the pleasantries are out of the way, it’s time to discuss everyone’s favorite browser, Internet Explorer.
I realize this suite is intended for mobile devices, but most functionalities work with good…I mean compliant desktop browsers, and that’s a good thing.
The Grouplist component works great in Firefox, Safari, Chrome, and mostly Opera. I’ve found it also works fine in IE9 using Vista. However, on my Windows 7 machine (running IE8), I get an “Object expected” error in touchui.js for this function:
//delay call to after-render time
dhx.delay=function(method, obj, params, delay){
return window.setTimeout(function() {
var ret = method.apply(obj,params);
method = obj = params = null;
return ret;
},delay||1);
};
It’s this line that causes the problem:
var ret = method.apply(obj,params);
Thoughts, anyone?
As fast solution you can replace the above line as
var ret = method.apply(obj,(params||[]));
It will fix issue in IE8 ( such fix is already included in dev. version and will be included in the next version )
Whoops, another error presents itself.
_touchstart :function(e){
if(t._disabled) return;
t._start_context = t._get_context(e);
t._translate_event("onTouchStart");
if(t._scroll[0] || t._scroll[1])
t._stop_scroll(e);
t._long_touch_timer = window.setTimeout(t._long_touch, t.config.longTouchDelay);
var element = dhx.ui.get(e);
if(element && element.touchable && (!e.target.className || e.target.className.indexOf("dhx_view")!==0)){
t._css_button_remove = element.getNode(e);
dhx.html.addCss(t._css_button_remove,"dhx_touch");
}
}
The line
if(element && element.touchable && (!e.target.className || e.target.className.indexOf(“dhx_view”)!==0)){
generates “target.className” is null or not an object error.
Also, when I load any page in IE8 linking to touchui.js, the browser is minimized automatically.
Sorry for trying to fit this round peg into desktop browsers’ square hole, but these components add a beautiful aesthetic impact to my site.
if you need not touch event, just add something like
dhx.Touch.disable();
it will disable touch events layer ( so this and maybe some future errors will be avoided )
as for error in question, line
if(element && element.touchable && (!e.target.className || e.target.className.indexOf("dhx_view")!==0)){
can be updated as
var target = e.target || event.srcElement;
if (element && element.touchable && (!target.className || target.className.indexOf("dhx_view")!==0)){
Thanks again.
I want to keep the touch events, that’s for sure. I’ll just put in conditional code to disable (as per your instructions) when IE is detected.