无法将字符串传递给jquery函数

时间:2016-11-17 09:10:05

标签: javascript 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行的字符串?

3 个答案:

答案 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(并不是真的很重要)。