我希望如果我的输入文本值不为空,则显示我的.removetext
div,但它不能正常工作。如果您在第二个字符后输入内容我的.removetext
被隐藏但如果我的输入不为空,则不要隐藏我的.removetext
类。
我的错误在哪里?我想我不理解keydown事件
$(document).ready(function() {
$('.search-hotels').on('input', function() {
var val = $.trim(this.value);
if (!val == "") {
$(".removetext").show(val.length > 0, function() {
var clear = $(this);
clear.on('click', function() {
alert('hey');
})
});
} else {
$(".removetext").hide();
}
});
});

.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels">
<div class="removetext">×</div>
</div>
&#13;
答案 0 :(得分:3)
您可以使用keyup
代替keydown
并将if
语句更改为以下内容来实现您的目标:
if ($(this).val());
使用keydown
表示它不会使用已输入的.val
,但会在更新输入之前检查.val
,因为.val
将会更新 keyup
事件之后。
更好的方法是使用input event,如下所示:
$(document).ready(function() {
$('.search-hotels').on('input', function() {
if ($(this).val()) {
$(".removetext").show(function() {
console.log($(this).attr('class'));
});
} else {
$(".removetext").hide();
}
})
});
.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels">
<div class="removetext">×</div>
</div>
答案 1 :(得分:3)
尝试输入 - 它也处理粘贴:
$(function() {
$('.search-hotels').on('input', function() {
var val = $.trim(this.value);
$(".removetext").toggle(val.length>0); // test anything not blank
});
// the event handler needs to be HERE and not inside the inout handler
$(".removetext").on('click', function() {
alert('hey');
});
});
&#13;
.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels" value="">
<div class="removetext">×</div>
</div>
&#13;
如果您需要回调,则需要显示并隐藏
$(function() {
$('.search-hotels').on('input', function() {
var show = $.trim(this.value).length>0;
if (show) {
$(".removetext").show("slow",function() {
console.log("showing");
});
}
else {
$(".removetext").hide("slow",function() {
console.log("hiding");
});
}
});
});
&#13;
.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels" value="">
<div class="removetext">×</div>
</div>
&#13;
答案 2 :(得分:2)
在键入字符之前触发了Keydown事件,因此您应该使用在键入字符后触发的keyup事件。
此外,!$(this).val()
与$(this).val()==""
使用if($(this).val()=="")
答案 3 :(得分:1)
你应该使用keyup。按下键可以记录按下的键,但它还没有填充输入。您可以浏览keydown事件属性并使用属性&#34; key&#34; (如果我没记错的话)获取在keydown期间输入的值,但是如果你想获取输入中的文本,你需要&#34; keyup&#34;
答案 4 :(得分:1)
您可以更好地使用keyup
,检查$(this).val().length
会更好。
$(document).ready(function() {
$('.search-hotels').on('keyup', function() {
if ($(this).val().length > 0) {
$(".removetext").show(function() {
console.log($(this).attr('class'));
});
} else {
$(".removetext").hide();
}
})
});
.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels">
<div class="removetext">×</div>
</div>
答案 5 :(得分:1)
它应该是if ($(this).val())
否则你的检查是否为空。
另外,使用keyup
keydown
会在val()
实际拥有值之前捕获它。{/ p>
$(document).ready(function() {
$('.search-hotels').on('keyup', function() {
if ($(this).val()) {
$(".removetext").show(function() {
console.log($(this).attr('class'));
});
} else {
$(".removetext").hide();
}
})
});
.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels">
<div class="removetext">×</div>
</div>
答案 6 :(得分:1)
keydown事件触发,此时你的值没有被更新,当释放按钮并更新输入值时尝试使用keyup事件触发...
$(document).ready(function() {
$('.search-hotels').on('keyup', function() {
console.log(this,$(this).val());
if ($(this).val()) {
$(".removetext").show(function() {
console.log($(this).attr('class'));
});
} else {
$(".removetext").hide();
}
})
});
&#13;
.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels">
<div class="removetext">×</div>
</div>
&#13;
答案 7 :(得分:1)
你不应该使用keydown事件,因为它是写入输入value
的“后面”的一个按键。
理想情况下,你应该使用oninput
(甚至不是每个人建议的密钥,但@mplungjan谁更快:)。 oninput还允许您正确跟踪复制/过去事件,与onkeyup不同。
此外,只需通过this.value
读取输入值,但请记住修剪它以消除空白。
$(document).ready(function() {
$('.search-hotels').on('input', function() {
if (this.value.trim()) {
$(".removetext").show();
} else {
$(".removetext").hide();
}
})
});
.main {
position: relative;
width: 40%;
}
.search-hotels {
width: 100%;
padding: 15px;
border: 3px solid #ccc;
}
.removetext {
position: absolute;
right: 0;
top: 25%;
font-size: 23px;
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
<input type="text" class="search-hotels">
<div class="removetext">×</div>
</div>