Jump to content
  • 0

Ошибка JS с 7 ослом:)


WolF™
 Share

Question

Здравствуйте! Приходится делать сайт с поддержкой ослов (IE). Ошибка заключается в моем объекте, если не сложно, подскажите где..

var ParseHash = function() {
$(window).hashchange(function() {
this.hash = location.hash.replace(/#/, "").split("&");
if(!this.hash[0]) this.hash = [];
if(this.onhc) this.onhc([this.hash, location.hash])
} .bind(this));
$(window).hashchange();
this.select = function(a) {
var b = !1;
jQuery.each(this.hash, function(d, c) {
if(c.split("=")[0] == a) return b = c.split("=")[1], !1
});
return b
};
this.set = function(set) {
var add = function(arr) {
if(this.hash[0] && this.select(arr[0])) {
jQuery.each(this.hash, function(i, val) {
if(val.split('=')[0] == arr[0]) {
this.hash[i] = [arr[0], arr[1]].join('=');
}
} .bind(this));
} else {
this.hash.push([arr[0], arr[1]].join('='));
}
} .bind(this);
if(arguments[1]) {
add([set, arguments[1]]);
} else {
for(var key in set) {
add([key, set[key]]);
}
}
this.sync();
};
this.del = function(key) {
if(arguments[1]) {
jQuery(this.hash, function(i, val) {
if(val && val.split('=')[1] == key) {
delete this.hash[i];
}
} .bind(this));
} else {
jQuery.each(this.hash, function(i, val) {
if(val && val.split('=')[0] == key) {
delete this.hash[i];
}
} .bind(this));
}
this.sync();
};
this.sync = function() {
var h = [];
for(var i = 0; i < this.hash.length; i++) {
if(i in this.hash) {
h.push(this.hash[i])
}
}
this.hash = h;
this.hash.sort();
location.hash = this.hash.join('&');
};
}

P.S: Сайт полностью на Ajax'e. С отключенным JS переходит в обычный режим. Буду очень рад ответу)

P.P.S: После этого кода IE отказывается вызывать даже alert..

P.P.P.S: Используется jQuery последней версии и JQuery.onhashchange plugin (первая ссылка в Google (дабы без рекламы))

Edited by WolF™
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Это смена области видимости функции.. Или в JQ она реализуется как-то иначе?)

Просто в JQuery не очень силен) А тут надо было nivo-slider подключить, а он на JQ как-раз..

Ну 2 библиотеку подключать было не вариант, начал учить большую и жирную либу)

Edited by WolF™
Link to comment
Share on other sites

  • 0
смена области видимости

О_о

Мне казалось функции в JS имеют лексическую область видимости и изменить ее можно только переписав код.

Да и синтаксиса такого не встречал.

Фленаган:

8.8.1. Лексическая область видимости

Функции в JavaScript имеют не динамическую, а лексическую область видимости. Это означает, что они исполняются в области видимости, которая была создана на момент определения функции, а не на момент ее исполнения. В момент определения функции текущая цепочка областей видимости сохраняется и становится частью внутреннего состояния функции.

Lругое дело, если Dы хотите вызвать ее в контексте объекта - applay / call

Edited by nerv
Link to comment
Share on other sites

  • 0

Извиняюсь, конечно я хотел вызвать ее в контексте другого объекта (в моем случае this)

Но самое интересное - данный способ работает во всех браузерах :D

Нашел решение - вытащил .bind из Mootools и "вкрутил" в свой проект. Может кому пригодится:

Function.prototype.life = function (scope) {
var fn = this;
return function () {
return fn.apply(scope, arguments);
};
};

Edited by WolF™
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy