无法将字符串传递给jquery函数
问题描述:
我希望获取搜索输入的当前值,然后清除焦点上的输入框,存储该字符串并将其传递到函数中以在模糊上重新填充输入框。无法将字符串传递给jquery函数
$("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行的字符串?
答
首先,不要使用bind()
。它已被弃用长时间前。改为使用on()
。
关于你的问题,你不能直接传递参数给匿名处理函数。由于它的立场,你的search_text
变量将持有blur
事件。
要修复此问题,您可以将变量存储在#search
元素本身的data
属性中。试试这个:
$("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
属性。可能值得研究,看看它是否符合你的需求。
答
使用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);
});
});
答
号这里是你会怎么做,该事件侦听器之前声明的变量,因此,它在范围:
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);
});
在驼峰命名变量,所以你宁愿在JavaScript中使用的约定searchText
(不是真的很重要)。
+1
虽然这仍然有一个全局变量 – nicovank
尽管这可能有效,但我建议尽量避免使用全局变量。 –