jQuery: щелчок Набора от цикла массива

Ответ МаркФельдмана сработал, но возникла проблема с событием щелчка мышью. При использовании элемента Padding on the Border щелчки мыши не регистрируются при щелчке в области дополнения между текстовыми элементами. Чтобы исправить это, я заменил Border на StackPanel и переместил Padding на TextBlock. Заполнение самого текстового блока правильно регистрирует щелчок.

Окончательный xaml:

<UserControl.Resources>
<ResourceDictionary>
    <ControlTemplate x:Key="AppleItemTemplate">
        <StackPanel Opacity="1">
                <TextBlock Padding="10,5" Foreground="{DynamicResource PrimaryTextColor}">
                <TextBlock.Text>
                    <Binding Path="DisplayName"/>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </ControlTemplate>
    <ControlTemplate x:Key="AppleItemTemplateSelected">
        <StackPanel Background="{DynamicResource LeftSidebarBGColorHighlight}">
            <TextBlock Padding="10,5" Foreground="{DynamicResource PrimaryTextColor}">
                <TextBlock.Text>
                    <Binding Path="DisplayName"/>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </ControlTemplate>
    <Style TargetType="{x:Type ListBoxItem}" x:Key="AppleContainerStyle">
        <Setter Property="Template" Value="{DynamicResource AppleItemTemplate}"/>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Template" Value="{DynamicResource AppleItemTemplateSelected}"/>
                <Setter Property="BorderThickness" Value="0"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

9
задан Eli 30 January 2009 в 08:24
поделиться

4 ответа

Да, я сталкивался с этой проблемой слишком часто. Area глобальная переменная, так как она не имеет var перед ним. Кроме того, не используйте для... в конструкции.

Но Вы могли бы все еще столкнуться с подобной проблемой. Бог знает, сколько сценариев я отладил из-за подобной ошибки. Выполнение следующих гарантий надлежащий обзор:

var Areas = ['ping','http', 'smtp', 'pop3'];

for( var i = 0; i < Areas.length; i++ ){
  (function(area) {
    $(area).click(function(){ alert(area); /* ShowArea(area); */ });
  })(Areas[i]);
}
12
ответ дан 4 December 2019 в 11:44
поделиться

Это - вещь JavaScript; это не связанный jQuery. То, что Вы делаете, создает закрытие, но Вы не понимаете правильно, как они работают.

Вы могли бы хотеть читать на http://blog.morrisjohns.com/javascript_closures_for_dummies, особенно Примеры 5, 6, и 7.

3
ответ дан 4 December 2019 в 11:44
поделиться

Проверьте объем своей переменной "области". Вы в основном присваиваете глобальную переменную, таким образом, на последнем повторении "область" ограничен по объему за пределами цикла.

2
ответ дан 4 December 2019 в 11:44
поделиться

убедитесь, что Вы добавили обработку событий щелчка после того, как DOM был загружен, можно включать это в главный элемент:

var Areas = ['ping','http', 'smtp', 'pop3'];

$(document).ready(function() {
    $.each(Areas, function(i, v){
        var Area = '#show_fold_' + v;
        $(Area).click(function() {
            alert(Area);
        });
    });
}
1
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: