我试图禁用自动更正输入Safari浏览器在iOS上。目前在purescript卤素中没有“自动更正”属性,所以我创建了一个,并修改了索引输入元素记录以使用它。Purescript卤素输入元素和自定义自动更正属性
我的问题是,当输入元素被渲染时,新的属性实际上并没有被添加到dom中。我还创建了一个“autocapitalize”属性,该属性在Chrome中呈现时正确添加到dom中,但不是safari,所以我知道我创建属性的方式可以工作(尽管我不确定这两个属性的工作原因在safari中)。我可以用purescript-jquery添加“autocorrect”属性,并且所有工作都在safari中运行,但是有没有更自然的方式来获取DOM中的属性?
以下是对safari特定的“自动更正”属性https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input的引用。
我还创建了一个GitHub库的代码https://github.com/sportanova/purescript-input-example/tree/master
我使用purescript v0.8.5和卤素V0.8
module Main where
import Prelude
import Control.Monad.Eff (Eff)
import Halogen
import Halogen.Util (awaitBody, runHalogenAff)
import Halogen.HTML.Properties.Indexed as PI
import Halogen.HTML.Elements as E
import Halogen.HTML.Indexed as HI
import Data.Generic (class Generic, gCompare, gEq)
import Control.Monad.Aff (Aff)
import Halogen.HTML.Core (Prop, prop, propName, attrName)
import Halogen.HTML.Elements.Indexed (Leaf)
import Halogen.HTML.Properties.Indexed (IProp, I)
import Unsafe.Coerce (unsafeCoerce)
import Data.Maybe (Maybe(..))
import Control.Monad.Eff.JQuery as J
inputx :: forall p i. Leaf (accept :: I, autocapitalize :: I, autocomplete :: I, autocorrect :: I, autofocus :: I, checked :: I, disabled :: I, form :: I, formaction :: I, formenctype :: I, formmethod :: I, formnovalidate :: I, formtarget :: I, height :: I, list :: I, max :: I, min :: I, multiple :: I, onAbort :: I, onChange :: I, onError :: I, onInput :: I, onInvalid :: I, onLoad :: I, onSearch :: I, onSelect :: I, pattern :: I, placeholder :: I, readonly :: I, required :: I, size :: I, src :: I, step :: I, inputType :: I, value :: I, width :: I) p i
inputx = unsafeCoerce E.input
refine :: forall a r i. (a -> Prop i) -> a -> IProp r i
refine = unsafeCoerce
onOffProp :: forall i. String -> Boolean -> Prop i
onOffProp pName = prop (propName pName) (Just $ attrName pName) <<< (\b -> if b then "on" else "off")
autoCapitalizeP :: forall i. Boolean -> Prop i
autoCapitalizeP = onOffProp "autocapitalize"
autocapitalize :: forall r i. Boolean -> IProp (autocapitalize :: I | r) i
autocapitalize = refine autoCapitalizeP
autoCorrectP :: forall i. Boolean -> Prop i
autoCorrectP = onOffProp "autocorrect"
autocorrect :: forall r i. Boolean -> IProp (autocorrect :: I | r) i
autocorrect = refine autoCorrectP
type State = { }
data Query a =
Initialize a
| Finalize a
ui :: forall eff. Component State Query (ExEff eff)
ui = lifecycleComponent {
render,
eval,
initializer: Just (action Initialize),
finalizer: Just (action Finalize)
} where
render :: State -> ComponentHTML Query
render st = HI.div_
[
HI.div_ [HI.text "autocorrect attribute not added"]
, inputx
[
PI.name "example"
, PI.autocomplete false
, autocorrect false
, autocapitalize false
, PI.spellcheck false
, PI.inputType PI.InputText
]
, HI.div_ [HI.text "autocorrect attribute added through jquery"]
, inputx
[
PI.name "working-example"
, PI.id_ "working-example"
, PI.autocomplete false
, autocorrect false
, autocapitalize false
, PI.spellcheck false
, PI.inputType PI.InputText
]
]
eval :: Natural Query (ComponentDSL State Query (ExEff eff))
eval (Initialize next) = do
inputEl <- fromEff $ J.select ("#working-example")
x <- fromEff $ J.setAttr "autocorrect" "off" inputEl
pure next
eval (Finalize next) = pure next
data Slot = Slot
derive instance slotGeneric :: Generic Slot
instance eqSlot :: Eq Slot where
eq = gEq
instance ordGeneric :: Ord Slot where
compare = gCompare
type ExEff eff = Aff (EX eff)
type EX eff = HalogenEffects (eff)
main :: forall eff. Eff (EX eff) Unit
main = runHalogenAff do
body <- awaitBody
runUI ui {} body
你又做了一次 - 谢谢! – sportanova