[DHTML] из скрипта сделать кнопку (input-button) продавленной?

freezer

Можно как-нибудь из скрипта сделать кнопку (input-button) продавленной?
Например, чтобы когда я нажимаю мышью на одну кнопку (отлавливаю все onmouse* продавливалась также и другая?

skvoria

Можно. Привинти id и меняй border.

freezer

А как это сделать грамотно, чтобы при любых возможных стилях кнопки работало так, как будто правда на кнопку нажимают?
Кстати, текст кнопки при этом тоже будет двигаться?

skvoria

А кнопку делать обязательно? картинкой не проще обойтись?
Сейчас попробовал на кнопке создать нечто похожее на нажатие - получилось довольно фигово

dedwowan

Покопай вызовы событий, если там есть вызов события нажатия на обьект (не клик, а именно нажатие то все сделать просто.
Если нет, то лучше забей. Все равно криво будет

Dasar

Сделай лучше checkbox, вместо такой хитрой кнопки.

freezer

не, мне нужна именно кнопка... на самом деле перед ней будет невидимая хрень висеть и отлавливать клики, а кнопка должна нажиматься так, как будто кликают по нет.... Вот такое корявое решение, но без него совсем фигово получается...

dedwowan

на самом деле перед ней будет невидимая хрень висеть и отлавливать клики

Нафиг отлавливать клики на кнопку с помощью невидимой хрени?) Бред какой-то.

Dasar

может все-таки проще сделать свою "кнопку", т.е. сделать две готовых картинки, которые будут друга друга замещать при нажатии и отжатии.

skvoria

Блин, вообще пипец.
Что-то мне кажется, что ты из простых вещей пытаешься сложные сконструировать.
Перехвати onClick и дело с концом.
В общем, давай ты опишеьш задачу максимально подробно, а мы тебе придумаем способ решения.
Да, кстати: готового метода класса, НАЖИМАЮЩЕГО кнопку, нет. RTF MSDN

dedwowan

Зато есть хрень которая воспроизводит событие onclick на обьекте, судя по тому что тут сказали этого хватит

skvoria

Он похоже что-то вроде шпиена собирается написать, поэтому одним button1.onClick=myButton2.click (условно говоря) наверное не обойдешься. А че бы напрямую в обработчик не слазить?
(прямо уже интересно, что за задача такая)

freezer

ну задача-то формулируется просто... чтобы у input type=file вместо кнопочки "Browse..." была кнопочка "Жми сюда!"
Для тех кто не в курсе, вызвать метод click для input-ы - не поможет начиная с какой-то версии IE

skvoria

Мда.
Вася с детства занимался карате. Вчера в подъезде его побили хулиганы. Они не знали, что Вася с детства занимался карате...


<html>
<body>
<form name="i">
<input type="file" id="b1">
<input type="button" id="b2" value="ОК" onclick="document.getElementById('b1').click;">
</form>
</body>
</html>


Не знаю, начиная с какого эксплорера, но у меня на 6-ом работает
Кстати, решение для IE6 здесь: http://www.faqts.com/knowledge_base/view.phtml/aid/6003/fid/177
Обсуждение и различные извраты на тему (порой прикольные, особенно про альфу) здесь: http://xpoint.ru/archive/threads/90/18190.html

freezer

если такой умный, может еще расскажешь как потом этот файл засубмитить?
P.S. кстати эту дискуссию на xpoint я нашел еще неделю назад...

skvoria

если читать умеешь, то решение есть в одной из приведенных мной ссылок

freezer

Итак, первая ссылка не катит, т.к. файл этот потом не субмитится. Вторая ссылка - я ее уже читал, и как сделать чтобы нажимая на input-file реально нажималась другая input-button - там не написано.

skvoria

Альфа-канал + фоновая картинка

freezer

гм... а текст для фоновой картинки рисовать на стороне сервера?..
P.S. и будет очень странно смотреться обычная рисованая кнопка на фоне XP-шных или наоборот

skvoria

Издержки ТЗ.
Ты просил кнопку с текстом "Жми сюда"? Вот тебе вариант реализации. Для другого - потребуется другое решение, покуда майкрософт не придумает компонент с настраиваемой кнопкой. А не придумает НИКОГДА, могу объяснить, почему.
Чем не устраивает обычная "Browse"?

freezer

А не придумает НИКОГДА, могу объяснить, почему.

Ну-ка, интересно?
Чем не устраивает обычная "Browse"?

Видимо, придется обходиться ей... кстати, есть какой-нибудь способ совсем спрятать текстовую часть input-file? ширину если до минимума ужать - все равно что-то остается

sveta75

<DIV style="margin: 0; padding:0; width: 85px; height:23px; background-image: url(i/browse-button.gif); overflow: hidden;">
<INPUT type="file" name="uploadfile" style="font:42px; position:relative; cursor:hand; width: 85px; height:23px; filter:alpha(opacity=0); -moz-opzcity: 0;">
</DIV>

freezer

это все понятно... но эта картинка-то "продавливаться" не будет

voronina

обрати внимание на Macromedia Fireworks там есть фишка сделать кнопку. + есть эфекты продавливания картинки и выдавливания (вот и получается кнопка нажатая - над кнопкой мышь - кнопка)
плюсом если лениво разбираться в JavaScript тама есть экспорт прямо в html-файл (открываешь его копируешь нужную часть и вставляешь в свою страницу).
В качестве альтернативы для кнопок делаешь отдельную панель на Macromedia Flash в отдельном фрейме. При нажатии на кнопку не перезагружаешь эту панель.
Плюсы:
1) Если интерфейс сложный, то загрузка даже при том что картинки кэшируются происходит долго.
2) можно использовать фишки вроде прозрачности анимации и других красивостей
3) практически бесплатные (по размеру) градиенты
Минусы:
flash должен быть разрешен у клиента
Оставить комментарий
Имя или ник:
Комментарий: