2009-09-09 4 views
1

Я работаю с виджетами jQuery ColorPicker, в частности реализуя функцию ColorPickerSetColor (только внутренняя настройка setColor). Выдержка из кода:Область действия функции jQuery each()?

 setColor: function(col) { 
      if (typeof col == 'string') { 
       col = HexToHSB(col); 
      } else if (col.r != undefined && col.g != undefined && col.b != undefined) { 
       col = RGBToHSB(col); 
      } else if (col.h != undefined && col.s != undefined && col.b != undefined) { 
       col = fixHSB(col); 
      } else { 
       return this; 
      } 
      return this.each(function(){ 
       if ($(this).data('colorpickerId')) { 
        var cal = $('#' + $(this).data('colorpickerId')); 
        cal.data('colorpicker').color = col; 
        cal.data('colorpicker').origColor = col; 
        fillRGBFields(col, cal.get(0)); 
        fillHSBFields(col, cal.get(0)); 
        fillHexFields(col, cal.get(0)); 
        setHue(col, cal.get(0)); 
        setSelector(col, cal.get(0)); 
        setCurrentColor(col, cal.get(0)); 
        setNewColor(col, cal.get(0)); 
       } 
      }); 
     } 

Похоже, что в виджете есть ошибка. Параметр «col» при проверке внутри каждого вызова() не определен. Я прочитал документацию и другие примеры, и все, что я могу найти, указывает, что «col» все еще должен быть в области, когда каждый() вызов выполняет эту функцию, но, похоже, это не так ...

Помогите?

Спасибо!

+0

Вы уверены, что col определен до возвращения this.each достигнуто? – seth

+0

Да, я уверен. Если мы добавим команду console.log (протоколирование Firebug) прямо перед и сразу после возврата this.each, первая команда log() выводит допустимое значение, а вторая выводит undefined ... – rinogo

ответ

0

Я только что использовал временную переменную в хорошо известной области (родительский элемент функции setColor). Определенно взлом, но он работает. Если кто-нибудь знает, как правильно исправить это, пожалуйста, дайте мне знать. :)

Спасибо! -Rich

+0

Если у вас есть время и желание, вы должны написать очень минимальный фрагмент кода, который дублирует проблему. В процессе этого вы можете даже узнать, почему это происходит. Если да, отправьте его здесь. –

0

Попробуйте определение еще одну переменную:

setColor: function(xCol) { 
    var col = xCol; 
    // ... 
} 

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

+0

Привет, Джон! Спасибо за Ваш ответ. К сожалению, это не сработало ... Любые другие мысли? – rinogo

+0

Попробуйте установить функцию переменной перед оператором return, а затем передайте эту переменную в качестве параметра «return this.each (f);» Если это не поможет, вам нужно будет опубликовать больше кода. –

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