Jump to content

Скрипт не работает в Opera


ser-yoga
 Share

Recommended Posts

  • Replies 419
  • Created
  • Last Reply

Top Posters In This Topic

Зачем понадобилось таблицу создавать динамически, тем более - таким сложным образом? Это для Опры принципиально? Иначе - калькулятор работать не будет? Или - будет?

Будет, или вы думаете, что не будет :)

Я с вас фигею... С каких это пор от способа создания элемента стало что-то зависеть???

Просто мне нравится програмировать, а не верстать...

Вот, я уменьшил js, оставив его полностью читабельным! Сможете уменьшить свой пример, чтобы он стал меньше моего? (Я могу ещ? уменьшить код)

d = null;

function G(i) {return document.getElementById(i)}

function C(t,c) {
var e = document.createElement(t);
if (null!=c) e.className = c;
return e;
}

function CTable(c) {return C('TABLE',c)}
function CTbody(c) {return C('TBODY',c)}
function CTd(c) {return C('TD',c)}
function CThead(c) {return C('THEAD',c)}
function CTr(c) {return C('TR',c)}

function l(x,f) {
var t = CTd(f);
t.innerHTML = x;
t.onmouseup = t.onmouseover = function() {this.className = this.className.replace(/ hover|hover| down|down/gi,'')+' hover'};
t.onmouseout = function() {this.className = this.className.replace(/ hover|hover/gi,'')};
if (f)
t.onmousedown = function() {
if (d) d.className = 'unfix';
this.className = 'fix down';
d = this;
G('mess').innerHTML = this.innerHTML;
}
else
t.onmousedown = function() {this.className = this.className.replace(/ down|down/gi,'')+' down'; G('mess').innerHTML = this.innerHTML;};

return t;
}

function o(a,b,c,d,e) {
var t = CTr();
t.appendChild(l(a));
t.appendChild(l(b));
t.appendChild(l(c));
if (e) t.appendChild(l(d));
else t.appendChild(l(d,'unfix'));

return t
}

function i() {
var _ = document.body.appendChild(CTable('out'));
_.onmouseover = function() {this.className = ''};
_.onmouseout = function() {this.className = 'out'};
_.align = 'center';

var t = ((_.appendChild(CThead())).appendChild(CTr())).appendChild(CTd('head'));
if (typeof IE != 'undefined') t.style.width = '100%';
t.id = 'mess';
t.colSpan = 4;
t.innerHTML = '0';

_ = _.appendChild(CTbody());
_.appendChild(o('AC','x<sup><small>-1</small></sup>','<','X'));
_.appendChild(o(7,8,9,':'));
_.appendChild(o(4,5,6,'-'));
_.appendChild(o(1,2,4,'+'));
_.appendChild(o(0,'.','<u>+</u>','=',1));
}

Link to comment
Share on other sites

2AKS

buttonOver это просто значение(строка) параметра onmouseover в CSS.

HTML, когда получает событие onmouseover, смотрит, не прописан ли в источнике этот парамет. Если он прописан, то по его значению вызывается соответствующая функция в контексте источника события. Так что функция одна.

Link to comment
Share on other sites

2ZoNT

Что делает процедура "appendChild" я знаю, пользовался ей, пока ненаучился использовать innerHTML. Размер и простота кода тоже важены. Особенно в примерах. (Они простыми должны быть, это очевидно.)

Я о другом: можно ли вообще в Опере отказаться от appendChild, и использовать innerHTML.

И ещ?. В опере className можно менять только у объектов, созданных динамически? Или в статическом HTML класс объектов менять динамически нельзя? (Или - льзя?)

Link to comment
Share on other sites

...можно ли вообще в Опере отказаться от appendChild, и использовать innerHTML.

...В опере className можно менять только у объектов, созданных динамически?

...Или в статическом HTML класс объектов менять динамически нельзя?

Да-а-а уж...

Link to comment
Share on other sites

2AKS

>Вы ничего не путаете?

Я запутал код специально, когда создавал DCSS. (Как бы защитил его.) А по прошествии времени и сам распутать не могу. Смотрю на него - бред какой-то, но ведь работает!

Потом я сделал DCSS2, потом LTT. Но они не прижились, как-то. (В голове каша теперь.)

Была ещ? пара вещей прикольных. Представьте себе HTML-страничка становится сервером. Т.е., после загрузки она с сервером связь не теряет. Если на сервере происходит событие, которое касается конкретного посетителя сайта, сервер может передать ему сообщение. Это общение в реальном времени. (Internet-аукцион, к примеру.)

Принцип такой: JScript дергает функуии java-appleta, тот (через сокет) д?ргает сервлет. Ну и в обратную сторону.

Link to comment
Share on other sites

Возможно у Вас стоит сервиспак 3. (Билл не рекомендует его ставить.)

Нет, SP3 не стоит. Пробовал ставить, но установщик угробил систему. :)

2yopopt(Модератор-у)

Предлагаю открыть тему для обсуждения: "Каким должен быть современный сайт, и каким он станет в будущем?"

(Обещаю, увлекательное путешестви, для тех, кому интересно, и у кого с нервами вс? впорядке.)

Нам и этой прекрасной темы достаточно. :)

Link to comment
Share on other sites

1) Я о другом: можно ли вообще в Опере отказаться от appendChild, и использовать innerHTML.

2) В опере className можно менять только у объектов, созданных динамически? Или в статическом HTML класс объектов менять динамически нельзя?

1) Можно, но как и для любого браузера включая ИЕ это будет на порядок медленее т.к. происходит парсинг innerHTML и сторится точно такое-же dom дерево.

2) Естественно можно делать все что угодно с DOM деревом и намного больше чем в IE вне зависимости от того, как это дерево построенно.

Процедура "getElementById(id)" тождественна: "document.body.all.id".

.all ? древний устаревший вариант, не принятый W3 комьюнити (не забывайте, туда и разработчики ИЕ тоже входят).

Т.е., после загрузки она с сервером связь не теряет.

Трудно такое вообразить? Про ajax ты конечно тоже слыхом не слыхивал. Снова нам глаза открываешь на свои потрясающие и уникальные изобретения, вместо того что-бы уже начать разбиратся что к чему в современном мире.

Link to comment
Share on other sites

2homm

>Про ajax ты конечно тоже слыхом не слыхивал.

Это, что ли:

function sendXML(){

var xmlRequestObject = new ActiveXObject("Microsoft.XMLHTTP");

xmlRequestObject.open("POST", "http://localhost/recieveXML.asp", false, "", "");

xmlRequestObject.send(xmlDocObject.XMLDocument);

alert(xmlRequestObject.responseText);

}

На этом гугль разбогател. Но сервер из HTML-странички на этом не постоишь.

Link to comment
Share on other sites

Ну, я, например, не знаю ответ на вопрос "почему?". Почему изменилось поведение Оперы? :)

Этого они, наверно, сами не знают. Они же мастера движки с нуля переписывать. Хотя у них с давних пор что-то не так с подстановкой base object в Reference. Вот с window такая фишка:

// global scope

var test = 1;

alert(window.propertyIsEnumerable('test')); // не-а!

for (var i in window) {
if (i == 'test') {
alert([i, window[i]].join(' = ')); // ой, вот же!
};
};

Заменить на this.propertyIsEnumerable('test'), то будет true. При этом, естественно, this === window.

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
Reply to this topic...

×   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