为什么我在jQuery中获得[object Object]?

时间:2011-02-25 02:52:18

标签: jquery

这是我在点击时隐藏输入值并在模糊时再次显示的简单功能:

// show input value then hide on click
$('.showHide').click(function() {
    var originalValue = $(this).val();
    $(this).attr("value", '');
});
$('.showHide').blur(function(originalValue) {
    $(this).attr("value", originalValue);
});

但是再次显示原始值并不起作用,相反,我得到了这个:[object Object]模糊,为什么?

4 个答案:

答案 0 :(得分:3)

这是一个范围问题

// show input value then hide on click
var originalValue;
$('.showHide').click(function() {
    originalValue = $(this).val();
    $(this).attr("value", '');
});
$('.showHide').blur(function() {
    $(this).attr("value", originalValue);
});

应该有效

答案 1 :(得分:2)

当blur调用你的处理函数时,它传递一个事件对象,而不是原始值。尝试存储这样的值:

// show input value then hide on click
$('.showHide').click(function() {
    jQuery.data($(this), 'originalValue', $(this).val();
    $(this).attr("value", '');
});
$('.showHide').blur(function() {
    $(this).attr("value", jQuery.data($(this), 'originalValue'));
});

答案 2 :(得分:1)

如果没有看到你的HTML,我不是肯定的,但我认为你的问题可能是第一个函数中的originalValue的本地声明,并尝试在第二个函数中使用它。试试这个:

// show input value then hide on click
var originalValue = "";
$('.showHide').click(function() {
    originalValue = $(this).val();
    $(this).attr("value", '');
});
$('.showHide').blur(function(originalValue) {
    $(this).attr("value", originalValue);
});

答案 3 :(得分:0)

  1. originalValue属于它所声明的函数的范围,并且不存在于它之外。你需要先在函数之外声明它。

  2. 传递给事件回调的值是事件对象。因此,在blur回调函数中,originalValue设置为事件对象,这就是它为非null的原因。

  3. 你想要的是这样的:

    var originalValue;
    
    $('.showHide').click(function() {
        originalValue = $(this).val();
        $(this).attr("value", '');
    });
    $('.showHide').blur(function() {
        $(this).attr("value", originalValue);
    });