Javascript 在meteor中保留禁用的输入
我目前正在中设计一个用户界面,其中包含多个文本输入,其内容在更改时保存到会话变量(Javascript 在meteor中保留禁用的输入,javascript,web-applications,data-binding,meteor,sync,Javascript,Web Applications,Data Binding,Meteor,Sync,我目前正在中设计一个用户界面,其中包含多个文本输入,其内容在更改时保存到会话变量(keyupevent)。由于preserve inputs包,这些输入框在聚焦时不会重新渲染 现在,我已经尝试在默认情况下禁用这些输入框,并使它们在双击时可编辑(这可能是一个错误的选择,但这是解决当前问题的最简单方法,对于初稿来说已经足够了——也许我稍后会在UX上询问)。但是,当最初禁用时,输入框不会保留并在输入单个字符时重新呈现,从而再次禁用 虽然保留不可编辑的元素不被重新渲染通常是没有意义的,但我在代码中找不到
keyup
event)。由于preserve inputs
包,这些输入框在聚焦时不会重新渲染
现在,我已经尝试在默认情况下禁用这些输入框,并使它们在双击时可编辑(这可能是一个错误的选择,但这是解决当前问题的最简单方法,对于初稿来说已经足够了——也许我稍后会在UX上询问)。但是,当最初禁用时,输入框不会保留并在输入单个字符时重新呈现,从而再次禁用
虽然保留不可编辑的元素不被重新渲染通常是没有意义的,但我在代码中找不到任何区别禁用状态的东西。那么它在哪里,我怎样才能绕过它呢?(当然,我可以在双击/模糊时设置一个禁用的
会话变量,并在启用状态下重新渲染输入框,但这对我来说太复杂了)
下面的代码(请注意,它是纯客户端JavaScript)再现了这个问题。它还呈现第二个输入框,该输入框从不被禁用,但也只能在双击后访问。这可以按预期工作,无需重新渲染。现场演示已部署到
已禁用。html
:
<head>
<title>disabled</title>
</head>
<body>
{{> body}}
</body>
<template name="body">
<p>Double-click to enter text</p>
{{> input f}}
{{> input t}}
</template>
<template name="input">
<div style="position: relative; width: 400px;">
<input id="{{id}}" class="input" type="text" value="{{value}}" style="width: 100%;" {{disabled}}/>
<!-- events on disabled inputs are not triggered -->
<!-- overlay with transparent div to catch clicks -->
<div class="catch" style="position: absolute; left: 0; top: 0; right: 0; bottom: 0;" />
</div>
</template>
对我来说,唯一的工作选项是定义disabled=“true”,因此代码如下所示:
disabled="{{#if isDisabled}}true{{/if}}"
如果isDisabled为false,Meteor甚至不会在DOM中呈现/显示禁用的标记(例如disabled=“”)。对于我来说,唯一的工作选项是定义disabled=“true”,因此代码如下所示:
disabled="{{#if isDisabled}}true{{/if}}"
如果isDisabled为false,Meteor甚至不会在DOM中呈现/显示禁用的标记(例如disabled=“”)。首先将输入设置为禁用可以实现什么?特别是如果双击它是可编辑的。也许您不需要添加disabled=“disabled”
属性,只需添加class=“appeage disabled”
并将其设置为禁用,然后双击它,在禁用和激活之间切换。@GeoffreyBooth我想我无论如何都会这样做;这只是一个速写稿。尽管如此,我还是很好奇为什么它会这样,即使它不会破坏应用程序。但是,哦,好吧。首先将输入设置为禁用是什么效果?特别是如果双击它是可编辑的。也许您不需要添加disabled=“disabled”
属性,只需添加class=“appeage disabled”
并将其设置为禁用,然后双击它,在禁用和激活之间切换。@GeoffreyBooth我想我无论如何都会这样做;这只是一个速写稿。尽管如此,我还是很好奇为什么它会这样,即使它不会破坏应用程序。但是,哦,好吧。