为单独的jquery函数设置$(this)的全局变量

时间:2012-09-11 05:29:55

标签: jquery variables

我正在使用jquery作为输入占位符的跨浏览器解决方案,但我不明白如何为$(this)设置全局变量,以便我可以在这两部分函数的第二部分中使用它。我首先获取输入的值并将其存储为$value但我需要在第二个函数中再次使用它来用它替换空值。我该怎么做呢?我应该提到的一点是,这需要适用于一种形式的多个文本输入。

       $(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            var $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });    

4 个答案:

答案 0 :(得分:4)

您可以使用这两个函数范围之外的变量..但最好使用data作为存储位置:

$(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            if ($this.val()) {
              $this.data('myval', $this.val());
            }
            $this.val('');
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($this.data('myval'));
            }
         });
});     

编辑:

补充说:

   if ($this.val()) {
     $this.data('myval', $this.val());
   }

答案 1 :(得分:2)

您必须使用所谓的闭包在两个函数之外声明$value。这样,在ready的同一调用中创建的两个函数之间共享$ value。 (备注:由于ready很可能只被调用一次,你也可以使用全局变量。但是,这可能会污染全局命名空间,所以我宁愿不这样做。)

$(document).ready( function() {
        var $value;
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });    

请注意,如果有多个'input[type=text]元素,则不会(或仅偶然)产生正确的结果,因为所有这些元素将共享相同的$value变量。在这种情况下,您应该使用其他帖子中提到的this.data解决方案。

答案 2 :(得分:0)

试试这个,

var $value;
$(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });    

答案 3 :(得分:0)

在函数外部定义变量,然后为其指定所需的值。

var $value = null;
$(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });