2009-10-22 1 views
1

Я не уверен на 100%, какой вопрос я должен задать, поскольку я слишком уверен в этом, так что позвольте мне описать, что я пытаюсь сделать (используя упрощенный пример) Идем оттуда.IE VBScript HTC Behavior - Статические переменные между всеми экземплярами поведения?

У вас есть произвольные элементы HTML (IMG, A, TD, что угодно). Через CSS они назначаются HTML-поведение

.BoldSelection { 
    behavior: url(SelectBold.htc); 
    border: thin solid black; 
} 

Поведение просто ставит толстую рамку вокруг элементов, когда они щелкнули - НО - они должны установить ранее выбранный элемент с нормальной границей.

Так вот источник HTC. Это будет работать, если значение CurrentFocusedElementID статично между всеми экземплярами поведения. Но это не так.

<Public:Attach Event="onContentReady" onEvent="LoadInit" /> 

    <Script Language="VBScript" type="Text/VBScript"> 

     Sub LoadInit 
      element.onClick = getRef("setFocusedElement") 
     End Sub 

     Sub setFocusedElement 
      set ele = document.getElementByID(CurrentlyFocusedElementID) 
      ele.style.border = "thin solid black" 
      CurrentlyFocusedElementID = element.id 
      element.style.border = "thick solid black" 
     End Sub 

    </Script> 

Я также подумал, что если я мог бы хранить произвольное свойство или атрибут в DOM объемлющего документа, то я мог бы использовать это как общее место, чтобы посмотреть на последний активный элемент ... увы, я не могу понять (например, захват значения класса тела)

Я хотел бы сохранить код, содержащийся в HTC. Мне нравится модульная мода делать это таким образом. Таким образом, я могу просто назначить поведение CSS и его выполнение - никаких обратных вызовов .. никаких родительских атрибутов. HTML-компонентов для объявления.

Как бы вы посоветовали мне это сделать?

Заранее спасибо.

+1

код, как это, намеренно предназначен для работы только в IE, является причиной того, почему мы не смогли убить IE6 в корпоративном мире, тем не менее, несмотря на то, что это старше чем iPod. Вполне возможно писать приложения для IE, которые также не блокируют хорошие браузеры. Позор тебе! –

+0

Ну, Джоэл, я полностью согласен с тобой. Но, как и все, есть место для этого. Я использую это для разработки приложения HTML. Корпоративным стандартом является IE - других браузеров нет. Это никогда не будет размещено на веб-сервере. Нет смысла писать это для чего-либо. ЗА ИСКЛЮЧЕНИЕМ IE. – Yesurbius

+0

Да, но вы можете написать код для IE, который не был в VBScript, и не зависел от поведения. Затем вы придерживаетесь корпоративного стандарта, не отрывая способность вашей компании передумать. Когда MS впервые изобрела HTC поведения, они представили их W3C. Что делать, если IE9 снижает поддержку поведения, поскольку W3C отклонил их? Придерживаясь стандартов, даже в магазине только для IE, в долгосрочной перспективе сэкономит деньги вашей компании. –

ответ

1

Отсутствует кусок головоломки был .. expandos. Пользовательские произвольные атрибуты. Вот завершенная .htc

<Public:Attach Event="onContentReady" onEvent="LoadInit" /> 

    <Script Language="VBScript" type="Text/VBScript"> 

    ' This is an example HTC only. If we were only setting borders, it'd make more sense to store 
    ' the previous element's border type and keep the rest of the formatting. For simplicity we are 
    ' swapping out the class name 

    Sub LoadInit 

     ' No ID defined for this element. Highlight it for the developer 
     If element.id = "" Then 
     element.style.bordercolor = "rgb(200,50,10)" 
     element.style.borderwidth = "thin" 
     element.style.borderstyle = "dashed" 
     Exit Sub 
     End If 

     ' Attach our Click Events 
     element.onClick = getRef("BoldIt") 
     element.onDblClick = getRef("BoldItMore") 

    End Sub 


    ' Changes the Class Name for the current element, and if a previously 
    ' selected element exists, restore its original classname 
    Sub changeClass(newCSSClass) 
     ' Storing the Expando on the document.body element 
     Set ele = window.document.body 

     ' Retrieve our two custom attributes - the ID of the element, and what its original ClassName was. 
     LastEle = ele.getAttribute("LastHighlightedEle") 
     LastEleClass = ele.getAttribute("LastHighlightedEleClass") 

     ' If there was in fact a previously selected element - restore the classname 
     If not isnull(LastEle) then 
     set oldEle = window.document.getElementByID(LastEle) 
     oldEle.className = LastEleClass 
     set oldEle = Nothing 
     End If 

     ' Set our two custom attributes to this element and adjust this element's CSS ClassName 
     LastEle = element.id 
     LastEleClass = element.className 
     ele.setAttribute "LastHighlightedEle",LastEle 
     ele.setAttribute "LastHighlightedEleClass",LastEleClass 
     element.className = newCSSClass 
    End Sub 

    ' Single Click Event - 'Thick' is a CSS Style for a 3px border 
    Sub BoldIt 
     changeClass("Thick") 
    End Sub 

    ' Double Click Event - 'Thicker' is a CSS Style for a 4px border 
    Sub BoldItMore 
     changeClass("Thicker") 
    End Sub 

    </Script>