我有一个输入字段,其具有在聚焦时出现的字段提示。问题是我正在使用原型效果并提示Effect.toggle
',如果有人在字段中输入,那么退格,则提示全部向后。有没有办法在输入有焦点时设置var或case或者可以设置的东西?
function fieldHint(fieldName,cloneField){
var hint = $(fieldName);
var clone = $(cloneField);
//only show fieldhint if input is empty
if(clone.value==''){
Effect.toggle(hint,'appear', { duration: 0.3 });
//clone position of input box for fieldhint
hint.clonePosition(clone,{
offsetTop: 18,
offsetLeft: 15,
});
}
}
function disableFieldHint(input,why,fieldName){
var hint = $(fieldName);
var input = $(input);
var inputLength = input.value.length;
if(why=='key' && inputLength<1){
Effect.toggle(hint,'appear', { duration: 0.1 });
}
if(why=='blur' && inputLength<1){
Effect.toggle(hint,'appear', { duration: 0.1 });
}
}
我通过onFocus调用fieldHint()并通过onBlur或onKeyDown调用disableFieldHint()所以我认为它变得混乱,因为onKeyDown最初工作以隐藏提示,但如果窥视类型然后退格所有内容,则开始输入再次,onKeyDown + value =“”将是真的,并且因为fieldHint()是一个切换,它将在人们输入时再次显示fieldhint,并且所有内容都被零除 - 除非窥视然后再次退格并再次开始输入,然后一切都是颠倒的世界 - 除非他们再次退格并再次开始打字,那么它就像fubar一样,并且相反的一天持续几秒钟。
我知道我可以使用style.display
来显示或隐藏提示,但渐渐使我看起来更像我知道我在做什么(显然不是这样)。
谢天谢地,先生们。
答案 0 :(得分:0)
我会在触发onKeyDown
时设置一个标记,并将其清除onBlur
,例如fieldName.hasStartedInput = true
。这样,你可以在尝试显示提示之前检查标志,如果是,则不显示提示。
编辑:处理您发布的新代码。这有点复杂和重复,所以我为你修剪了一下。我没有你所有的代码,所以我显然无法测试它,但你至少应该能够得到这个想法。
var typing = false, first = false;
function isTyping(areThey) {
typing = areThey;
}
function fieldHint(fieldName, cloneField) {
var hint = $(fieldName);
var clone = $(cloneField);
// only show fieldhint if input is empty
if ( clone.value == '' && !typing && !first ) {
first = true;
Effect.toggle(hint, 'appear', { duration: 0.3 });
//clone position of input box for fieldhint
hint.clonePosition(clone, {
offsetTop: 18,
offsetLeft: 15,
});
}
}
function disableFieldHint(input, why, fieldName) {
var hint = $(fieldName);
if ( why == 'key' && typing && first && $(input).value.length == 0 ) {
Effect.toggle(hint, 'appear', { duration: 0.1 });
first = false;
}
else if ( why == 'blur' && typing == first ) {
Effect.toggle(, 'appear', { duration: 0.1 });
}
}
重点是不要忘记JavaScript有真正的布尔类型,这意味着你可以使用true
和false
,而不是0
和{ {1}},或1
和"TRUE"
。话虽如此,您必须在调用"FALSE"
的地方更新您自己的代码,并确保传入的是布尔类型,而不是字符串isTyping()
或"TRUE"
。 / p>
答案 1 :(得分:0)
好的..感谢Justin Johnson的指导,这是我想出的火车残骸......我添加了一个基于模糊或keydown设置的功能...然后添加了一个var来说人们已经开始输入因为onkeydown检查仍然存在问题,因为如果他们正在键入并且在keydown上调用了禁用,即使键入为true,它仍会激活,因为它被调用以隐藏初始keydown上的提示......呃,不知道这是否有意义。
无论如何,它检查它是否是初始keydown,如果是隐藏提示,如果不隐藏它(因为它已经隐藏了,再次调用hide会显示它[thx TOGGLE!]) 。它还可以防止显示提示再次出现,如果某人键入然后退格,然后再次输入.... wut
typing = '';
function isTyping(areThey){
if(areThey == 'TRUE'){
typing = 'TRUE';
}else{
typing = '';
}
}
frst=0;
function fieldHint(fieldName,cloneField){
var hint = $(fieldName);
var clone = $(cloneField);
//only show fieldhint if input is empty
if((clone.value=='') && (typing != 'TRUE') && (frst==0)){
frst = 1;
Effect.toggle(hint,'appear', { duration: 0.3 });
//clone position of input box for fieldhint
hint.clonePosition(clone,{
offsetTop: 18,
offsetLeft: 15,
});
}
}
function disableFieldHint(input,why,fieldName){
var hint = $(fieldName);
var input = $(input);
var inputLength = input.value.length;
if(why=='key'){
switch(typing){
case 'TRUE':
if((inputLength<1) && (frst==1)){
Effect.toggle(hint,'appear', { duration: 0.1 });
frst = 0;
}
}
}
if((why=='blur')&&(typing=='TRUE')&&(frst==1)){
Effect.toggle(hint,'appear', { duration: 0.1 });
}
if((why=='blur')&&(typing=='')&&(frst==0)){
Effect.toggle(hint,'appear', { duration: 0.1 });
}
}