我希望获取搜索输入的当前值,然后清除焦点上的输入框,存储字符串并将其传递给函数以在模糊时重新填充输入框。
$("input#search").bind('focus', function() {
var search_text = document.getElementById('search').value;
$("input#search").val("");
}).bind('blur', function(search_text) {
$("input#search").val(search_text);
});
目前,这已成功抓取焦点上的值并清除输入框,但在模糊时,它会使用[object Object]
填充输入。
我是否正确传递了第4行的字符串?
答案 0 :(得分:2)
首先,请勿使用bind()
。它在 long 之前被弃用了。请改用on()
。
关于您的问题,您不能以您尝试的方式直接将参数传递给匿名处理函数。目前,search_text
变量将保留blur
事件。
要解决此问题,您可以将变量存储在data
元素本身的#search
属性中。试试这个:
$("input#search").on('focus', function() {
$(this).data('search-text', this.value).val('');
}).on('blur', function(search_text) {
$(this).val($(this).data('search-text'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="search" value="foo bar" />
此外,您在此处创建的行为与placeholder
属性类似。可能值得研究一下,看看它是否符合您的需求。
答案 1 :(得分:0)
使用jQuery的.on()来注册事件。
var search_text;
$("input#search").on('focus', function() {
search_text = document.getElementById('search').value;
$("input#search").val("");
});
$("input#search").on('blur', function() {
$("input#search").val(search_text);
});
替代可能是,
$("input#search").on('focus', function() {
var search_text = document.getElementById('search').value;
$("input#search").val("");
$(this).on('blur', function() {
$("input#search").val(search_text);
});
});
答案 2 :(得分:0)
没有。您将如何操作,在事件侦听器之前声明变量,使其位于范围内:
var search_text;
$("input#search").bind('focus', function() {
search_text = document.getElementById('search').value;
$("input#search").val("");
}).bind('blur', function() {
$("input#search").val(search_text);
});
用于在Camel Case中命名变量的JavaScript约定,所以你宁愿使用searchText
(并不是真的很重要)。