Anton
это не "из того же разряда"
Это почему это?
Твой пример проверяет, есть ли в списке вариантов поля со списком значение, которое мы хотим присвоить полю.
То, про что я писал - фактически оптимизация по времени того же самого действа в случае частых проверок (хотя конечно не могу гарантировать, что это будет быстрее - не проверял).
В обоих случаях результат получится одинаковый: либо оно там есть, либо нет.
Но вообще говоря положительный ответ не гарантирует успешности присваивания, так как в принципе между проверкой и присваиванием список может измениться.
Но наверное если такое и возможно, то пренебрежимо маловероятно...
--- ---
Отсутствует
То, про что я писал - фактически оптимизация по времени того же самого действа в случае частых проверок
Неужели ?
Вообще, непонятно, зачем оптимизировать по времени доступ к menulist, но вариант с getElementsByAttribute не единственный, можешь попробовать хэш типа "значение":"индекс" или ещё что-нибудь, а насколько каждый вариант будет быстрым покажет только эксперимент.
Но вообще говоря положительный ответ не гарантирует успешности присваивания, так как в принципе между проверкой и присваиванием список может измениться.
Я уже думаю, и не только список. Даже уверен. Не пойму только, в чём проблема. Поставь проблему понятней.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Поставь проблему понятней.
Ну так я вроде сразу и написал:
Если у устанавливаю value у поля со списком - могу я проконтролировать, что значение подошло?
Хотя наверное не очень понятно.
То есть речь о следующем:
Я установил значение поля со списком.
В процессе этого/сразу после этого или через какое-то время - могу я понять, что у меня там сейчас правильное значение не проверяя, принадлежит ли мое значение тому, что написано в value списка вариантов?
Мб исключение какое бросается?..
Или обработчик события туда можно повесить?..
Или единственный способ - варианты того как ты написал ?
--- ---
Отсутствует
Ну так я вроде сразу и написал:
Ну и где там про оптимизацию по времени ?
Факт изменения value можешь проверять обработчиками onchange, oninput, onselect.
Проверка правильности "автоматом", afaik, не делается, кроме случая отсутствия атрибута editable.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
то должно помочь
Код:
if (document. getElementById ("ml01"). getElementsByAttribute ("value", "xyz"). length) ...
Я правильно понимаю, что getElementsByAttribute работает только для XUL?
Мне просто надо все это делать для элементов html-страницы.
--- ---
Отсутствует
Я правильно понимаю, что getElementsByAttribute работает только для XUL?
Нет, не правильно.
p.s. для html, насколько мне известно - собственная реализация (в т. ч. и getElementsByAttribute) через xpath, перебор или строчный поиск в innerHTML.
Отредактировано Anton (03-08-2008 10:11:26)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Нет, не правильно.
p.s. для html, насколько мне известно - собственная реализация (в т. ч. и getElementsByAttribute) через xpath, перебор или строчный поиск в innerHTML.
Тогда почему у меня Лис (2-я версия) на вызов getElementsByAttribute говорит, что он не является методом?
То есть getElementById (точнее у меня getElementByName, но это по идее должно быть без разницы) выполняется, а вот на getElementsByAttribute такое говорится
Добавлено Sun Aug 3 11:47:58 2008 :
Опять же в DOM:element тоже отсутствует описание этого метода
Правда там написано
While these interfaces are generally shared by most HTML and XML elements, there are more specialized interfaces for particular objects listed in the DOM HTML Specification—for example the HTML Table Element and HTML Form Element interfaces.
Но думаю такой метод должен быть определен везде, так как он фактически позволяет выбирать элементы произвольного типа.
--- ---
Отсутствует
Forest
Тогда почему у меня Лис (2-я версия) на вызов getElementsByAttribute говорит, что он не является методом?
Так ты же его, скорее всего, не определил. Напрямую он определён только в XUL. Если добавить код, типа
ml. getElementsByAttribute = function (attrName, attrValue) { ... }
то getElementsByAttribute будет работать и в xml и в html.
Я именно так и сказал.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Прямо так в коде и написать (включая ... в теле)?
А ml - это что? Или вместо него просто надо поставить переменную с объяктом от которого он будет вызываться?
--- ---
Отсутствует
Прямо так в коде и написать (включая ... в теле)?
А ml - это что? Или вместо него просто надо поставить переменную с объяктом от которого он будет вызываться?
А сам-то как думаешь ? )
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
А сам-то как думаешь ? )
То есть ты предлагаешь мне самому реализовать getElementsByAttribute?
Добавлено Sun Aug 3 13:26:36 2008 :
Если можно как-то шаблонным образом переносить реализацию с XUL на HTML - дай пожалуйста ссылку на описание как это делается.
--- ---
Отсутствует
Если можно как-то шаблонным образом переносить реализацию с XUL на HTML - дай пожалуйста ссылку на описание как это делается.
Насколько мне известно - нельзя.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Ну просто огромное спасибо за неоценимую помощь в лице двух примеров неработающего кода
Тогда тем более полемика на тему
это не "из того же разряда"
была совершенно пустой, так как я именно про реализацию этой фичи фактически и писал!
Только время потерял - давно бы уж сделал, если бы не мысль, что "возможно я плохо искал"
--- ---
Отсутствует
Forest
Ну просто огромное спасибо за неоценимую помощь
Всегда пожалуйста. Надеюсь, мне удалось положительно повлиять на твой способ постановки вопросов...
в лице двух примеров неработающего кода
... хотя и не в полной мере. Что ж, на то они и примеры.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Надеюсь, мне удалось положительно повлиять на твой способ постановки вопросов...
И не надейся!
Если не нравился вопрос - надо было так сразу и писать чем (кстати еще не поздно)!
А сейчас это больше похоже на оправдание.
--- ---
Отсутствует
Forest
И не надейся!
Жаль.
Если не нравился вопрос - надо было так сразу и писать чем (кстати еще не поздно)!
Хорошо. Вопрос был такой:
Если у устанавливаю value у поля со списком - могу я проконтролировать, что значение подошло?
value то в любом случае меняется, а вот попал ли я в список значений?..
Или это только если достать этот список и по нему проверять каждое значение?
и я ответил: "...Если <menulist...".
Как скоро после этой пары вопрос-ответ выяснилось, что код требуется для html ? Вот это мне очень не понравилось. Перед этим точно так же вопрос об оптимизации был поставлен постфактум, когда я просил о более точной формулировке. Во второй уже раз решил - раз вопросы задаются неопределённо, ну я и отвечать буду в той же манере.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Жаль.
Я умею учиться и критически отношусь к себе, но в данном случае считаю претензию необоснованной.
и я ответил: "...Если <menulist...".
Как скоро после этой пары вопрос-ответ выяснилось, что код требуется для html ?
1. Да, я забыл указать про html! Хотя у меня есть подозрение, что произошло нечто другое - я "забыл" про html потому, что знал про то, как это делается для XUL, и неосознанно счел это очевидным.
2. Я не сразу проверил все мне предложенное. Я вообще стараюсь избегать ситуаций, когда срочно нужен ответ. Я задал вопрос и стал делать другую часть, в которой знал как все делать.
Поэтому и свою оплошность я понял не сразу.
Однако прошу отметить, что:
а. Я поблагодарил за помощь
б. Я никому не предъявлял претензия за свою забывчивость
в. Я просто задал уточняющий вопрос
В контексте всего этого изменение линии поведения я принял как обиду на то, что помощь оказалась невостребованной (типа я тут стараюсь-пишу-помогаю, а всякие чайники не могут сразу вопрос поставить - вот не буду больше писать!).
Как мне в таких случаях в детстве говорила тетушка "На обиженных воду возят", за что ей огромное спасибо.
А теперь о том, чего не было:
Перед этим точно так же вопрос об оптимизации был поставлен постфактум
- вопрос об оптимизации не ставился!
Если в этом есть сомнения - рекомендую перечитать заново.
Хотя в первую очередь мы видим (в том числе и в тексте) то, что хотим увидеть.
--- ---
Отсутствует
для html встроенного getElementsByAttribute нет.
пробуем в chrome и в обычном документе
если уже действительно нужно, то можно сделать самому.
Отредактировано Shutnik (03-08-2008 22:47:05)
Отсутствует
Shutnik
alert("getElementsByAttribute" in window.document)
Как и ожидалось, false
В моем случае полная реализация такого метода не нужна - сделал простым перебором "option".
Но как делать в принципе понятно (рекурсией по всему древу ДОМа).
Спасибо за интересный способ определения наличия/отсутствия фич
--- ---
Отсутствует
Возникла задача - реализовать копирование (ctrl+c например) для контролов xul-а (конкретно это был листбокс).
Поискал инфу на эту тему, но нашел только про меню, да и то там как-то обойден стороной вопрос про реализацию самих обработчиков.
Попробовал сделать по-аналогии - не получилось.
Вот что пробовал:
... <keyset id="sidebarKeyset"> <key id="copy_key" oncommand="CKGFF2_GetSelected(event);" modifiers="accel" key="C" /> </keyset> ... <listbox id="CKGFF2-Current" flex="1" key="copy_key" /> ...
Не смог получить в обработчике CKGFF2_GetSelected(event) контекст listbox-а - везде только keyset.
Другой вариант вообще не заработал (нажатия не ловил).
В принципе установкой обработчика в сам listbox проблема решается, но тогда приходится отслеживать то ли нажато.
А хотелось именно привязать обработчики к хоткеям и использовать при необходимости.
Или мое желание не соответствует идеологии разработки и работающий вариант - единственно верный, а keyset - только для меню?
Отредактировано Forest (26-08-2008 14:35:29)
--- ---
Отсутствует
Anton
Пробуй event.explicitOriginalTarget
Спасибо, помогло
Только вот я почитал доку на developer.mozilla.org и как-то не уверен, что это допустимый вариант использования (правда там вообще дока неполная).
И как оно вообще работает, когда таких хоткеев определяется много (десятки например)? Или справляется?
--- ---
Отсутствует
Anton
или document. commandDispatcher. focusedElement
Да, это тоже должно подойти, спасибо
Добавлено Mon Sep 1 16:04:21 2008 :
Я правильно понимаю, что в АПИ Лиса нет работы с консолью?
Просто понадобилось получить stdout консольного приложения, а ничего подходящего не нашел
Пришлось делать через перенаправление в файл.
Вот что получилось (нужна была только первая строка):
// временный файл создаем в папке tmp var tmpFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("TmpD", Components.interfaces.nsIFile); var tmpPath = tmpFile.path; tmpFile.append("TmpFile"); var tmpFullPath = tmpFile.path; // Запускаем наш скрипт с перенаправлением вывода во временный файл var runFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); runFile.initWithPath("c:\\script.bat"); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(runFile); var args = [">", tmpFullPath]; process.run(false, args, args.length); // Получаем данные из временного файла var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); istream.init(tmpFile, 0x01, 0444, 0); istream.QueryInterface(Components.interfaces.nsILineInputStream); var line = {}, hasmore; hasmore = istream.readLine(line);
Оно работает, но как-то кривовато выглядит
Опять же не получилось удалить этот временный файл:
не работает, а попытка работать с файлом через nsIFile (а не через nsILocalFile) успехом пока не увенчалась.
Вообще или я еще не до конца разобрался с этим, либо все таки АПИ работы с файловой системой у Лиса хромает?..
От ссылочки на правильную документацию про это/пример не отказался бы (особенно с удалением).
Инфу копал в основном на оффсайте, но мб недостаточно глубоко?..
Или нормально это все можно только через XPCOM сделать?
Отредактировано Forest (01-09-2008 16:05:07)
--- ---
Отсутствует