2010-11-19 2 views
0

Я хочу передать строковое значение, которое я получаю из текстового поля в focus() и blur(), , но почему я получу объект [object object]?Передача параметров: передача строкового значения в функции

Я получаю строковое значение каждого текстового поля успешно с каждым() и хранить строку в вар - var value_default = $this.val();

Тогда я прохожу этот var в $this.focus(function (value_default) {..}) - я передать его неправильно?

Если я предупреждаю об этом value_default, я получу [object oject] - alert (value_default);

Ниже весь код, если вы хотите увидеть его ...

$(".autohide").each(function(){ 

    /* set the variable and store its value */ 
    var $this = $(this); 

    var value_default = $this.val(); 

    var parent_autohide = $this.parents('form'); 

    var parent_button = $('input[type=submit]',parent_autohide).parents("div:.item-form").hide(); 


    var parent_marginbottom = parseInt($this.parents("div:.item-form").css("marginBottom")); 

    $this.parents("div:.item-form").css({margin:'0px'}); 

    alert(value_default); // I will get the string value of each textarea element 

    $this.focus(function (value_default) { 

     alert(value_default); // I will get [object object] 

     var $this = $(this); 

     $this.elastic(); 

     $this.parents('div:.item-form').css({margin:'0px 0px '+parent_marginbottom+'px 0px'}); 

     var $this_parent = $this.parents('form'); 

     var $this_button = $('input[type=submit]',$this_parent).parents("div:.item-form").show(); 


    }).blur(function(value_default){ 

     alert(value_default); // I will get [object object] 

     var $this = $(this); 

     var value_current = $this.val(); 

     if (value_current == value_default) 
     { 
      $this.css({ height: 'inherit'}); 

      $this.parents('div:.item-form').css({margin:'0px'}); 

      var $this_parent = $this.parents('form'); 

      var $this_button = $('input[type=submit]',$this_parent).parents("div:.item-form").hide(); 

     } 
    }); 

}); 

большое спасибо.

редактировать:

Я знаю, что вызывает ошибку в IE -

$this.css({height: 'inherit'}); // this line will create error on IE 

$this.css({height:''}); // IE likes this 

так, что случилось с «» наследуют, что IE не будет принимать его, как и другие браузеры ??

+0

В этом случае '$ this.focus (function (value_default) {..})' вы фактически не передаете функцию value_default в функцию. Вы определяете функцию, где 'value_default' является первым аргументом (который в этом случае будет объектом события, отправленным из события фокуса) – climbage

ответ

1

Как сказал комментатор, функция, которую вы создаете, которая обрабатывает фокус и размытие, имеет первый параметр (параметр события), определенный как value_default, который переопределяет ту, которую вы объявляете выше.

Так оно и должно работать, если вы просто сделать:

.focus(function(){ и .blur(function(){

Таким образом, вы должны быть в состоянии получить доступ к value_default Вы заявляете до того, как он по-прежнему в пределах объема и не переопределены параметрами функции ,

+0

да, это работает с тем, что во всех браузерах принимается IE7 .... – laukok

+0

Что делает ваше оповещение в IE7 сейчас? –

+0

Это кажется мне рискованным. Значение 'value_default' во всех событиях размытия/фокусировки в конечном итоге станет последним значением (я думаю). http://jsfiddle.net/CcdWt/ - нажмите на все три div и вы получите значение «test3» (исправьте меня, если я установил это неправильно) – climbage

Смежные вопросы