2017-08-22 6 views
1

基本HTML、CSS、JQueryを使用してリストコンポーネントを試してみました。クリックイベントでリスト項目を選択したい。リストアイテムのテキスト(padding space)の周りのスペースをクリックすると、クリックイベントがキャプチャされます。しかし、テキストをクリックすると(file-name div全体のスペースも)、クリックイベントはキャプチャされません。内部の子供のdivのためかもしれない?どんな助けもありがとう。ありがとう。子div内にキャプチャされなかったクリックイベント

function selectFile(id, key) { 
 
    if($(id).hasClass('selected')) { 
 
    $(id).removeClass('selected'); 
 
    } else { 
 
    $(id).addClass('selected'); 
 
    } 
 
} 
 

 
$('.file-list-section').on('click', function(event) { 
 
    selectFile('#'+event.target.id, event.target.dataset.key); 
 
})
.file-row { 
 
    padding: 10px; 
 
    border-bottom: 1px solid lightgray; 
 
    cursor: pointer; 
 
} 
 
.file-list-section .file-row.selected { 
 
    background: #26a69a; 
 
    color: white; 
 
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<div id="fileList" class="file-list-section"> 
 
    <div class="file-row" id="fileId_0" data-key="cd58ef701e28f6df8.jpg"> 
 
    <div class="file-name">cd58ef701e28f6df8.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_1" data-key="a682e06e25c5c86.jpg"> 
 
    <div class="file-name">a682e06e25c5c86.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_2" data-key="Jefree" copy.jpeg=""> 
 
    <div class="file-name">Jefree copy.jpeg</div> 
 
    </div> 
 
</div>

+0

ファイル名にはIDがありません - あなたは親IDを渡す必要がありますファイル名をクリックすると – mplungjan

答えて

0

function selectFile(id, key) { 
 
    if($(id).hasClass('selected')) { 
 
    $(id).removeClass('selected'); 
 
    } else { 
 
    $(id).addClass('selected'); 
 
    } 
 
} 
 

 
$('.file-list-section .file-row').on('click', function(event) { 
 

 
    selectFile('#'+$(this).attr('id'), $(this).data('key')); 
 
})
.file-row { 
 
    padding: 10px; 
 
    border-bottom: 1px solid lightgray; 
 
    cursor: pointer; 
 
} 
 
.file-list-section .file-row.selected { 
 
    background: #26a69a; 
 
    color: white; 
 
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<div id="fileList" class="file-list-section"> 
 
    <div class="file-row" id="fileId_0" data-key="cd58ef701e28f6df8.jpg"> 
 
    <div class="file-name">cd58ef701e28f6df8.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_1" data-key="a682e06e25c5c86.jpg"> 
 
    <div class="file-name">a682e06e25c5c86.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_2" data-key="Jefree copy.jpeg"> 
 
    <div class="file-name">Jefree copy.jpeg</div> 
 
    </div> 
 
</div>

0

あなたは結合事象のためfile-rowを対象とし、所望の動作を実行するためにthisを使用する必要があります。

function selectFile() { 
 
    $(this).toggleClass('selected'); 
 
    
 
    console.clear(); 
 
    console.log($(this).data("key"), $(this).find('.file-name').text()); 
 
} 
 

 
$('.file-list-section').on('click', '.file-row', selectFile)
.file-row { 
 
    padding: 10px; 
 
    border-bottom: 1px solid lightgray; 
 
    cursor: pointer; 
 
} 
 

 
.file-list-section .file-row.selected { 
 
    background: #26a69a; 
 
    color: white; 
 
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<div id="fileList" class="file-list-section"> 
 
    <div class="file-row" id="fileId_0" data-key="cd58ef701e28f6df8.jpg"> 
 
    <div class="file-name">cd58ef701e28f6df8.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_1" data-key="a682e06e25c5c86.jpg"> 
 
    <div class="file-name">a682e06e25c5c86.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_2" data-key="Jefree" copy.jpeg=""> 
 
    <div class="file-name">Jefree copy.jpeg</div> 
 
    </div> 
 
</div>

1

あなたのコードではなく、個別に各リスト項目を扱うのリスト全体のクラスに焦点を当てました。 jQueryを単純化して、 "this" .file-rowをクリックすると、Selectedが選択されたクラスをトグルします。これにより、複数の項目をハイライトできます。一度に1つだけ必要な場合は、クリックごとに「選択された」クラスをすべてクリアします。

$('.file-row').removeClass('selected'); 
 

 
$('.file-row').click(function(){ 
 
$(this).toggleClass('selected'); 
 
})
.file-row { 
 
    padding: 10px; 
 
    border-bottom: 1px solid lightgray; 
 
    cursor: pointer; 
 
} 
 
.file-list-section .file-row.selected { 
 
    background: #26a69a; 
 
    color: white; 
 
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<div id="fileList" class="file-list-section"> 
 
    <div class="file-row" id="fileId_0" data-key="cd58ef701e28f6df8.jpg"> 
 
    <div class="file-name">cd58ef701e28f6df8.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_1" data-key="a682e06e25c5c86.jpg"> 
 
    <div class="file-name">a682e06e25c5c86.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_2" data-key="Jefree" copy.jpeg=""> 
 
    <div class="file-name">Jefree copy.jpeg</div> 
 
    </div> 
 
</div>

0

あなたはイベントのあなたの通過には狭すぎる..です以下で

function selectFile(id, key) { 
 
    if($(id).hasClass('selected')) { 
 
    $(id).removeClass('selected'); 
 
    } else { 
 
    $(id).addClass('selected'); 
 
    } 
 
} 
 

 
$('.file-list-section .file-row').on('click', function(event) { 
 
    selectFile('#'+$(this).attr('id'), $(this).data('key')); 
 
})
.file-row { 
 
    padding: 10px; 
 
    border-bottom: 1px solid lightgray; 
 
    cursor: pointer; 
 
} 
 
.file-list-section .file-row.selected { 
 
    background: #26a69a; 
 
    color: white; 
 
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<div id="fileList" class="file-list-section"> 
 
    <div class="file-row" id="fileId_0" data-key="cd58ef701e28f6df8.jpg"> 
 
    <div class="file-name">cd58ef701e28f6df8.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_1" data-key="a682e06e25c5c86.jpg"> 
 
    <div class="file-name">a682e06e25c5c86.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_2" data-key="Jefree" copy.jpeg=""> 
 
    <div class="file-name">Jefree copy.jpeg</div> 
 
    </div> 
 
</div>

0

をスクリプトを更新 - 代わりにイベントハンドラを追加しますキーで区切る

はまた、代わりにクラスをテストするためのクラスを切り替える:

$('.file-row').on('click', function(e) { 
 
    $(this).toggleClass('selected'); 
 
    console.log($(this).data("key")) 
 
});
.file-row { 
 
    padding: 10px; 
 
    border-bottom: 1px solid lightgray; 
 
    cursor: pointer; 
 
} 
 
.file-list-section .file-row.selected { 
 
    background: #26a69a; 
 
    color: white; 
 
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<div id="fileList" class="file-list-section"> 
 
    <div class="file-row" id="fileId_0" data-key="cd58ef701e28f6df8.jpg"> 
 
    <div class="file-name">cd58ef701e28f6df8.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_1" data-key="a682e06e25c5c86.jpg"> 
 
    <div class="file-name">a682e06e25c5c86.jpg</div> 
 
    </div> 
 
    <div class="file-row" id="fileId_2" data-key="Jefree" copy.jpeg=""> 
 
    <div class="file-name">Jefree copy.jpeg</div> 
 
    </div> 
 
</div>

+0

を渡す要素が効率的になり、 ''#' + $(this).attr(" id ")'を使って作成されたセレクタ – Satpal

+0

Actua llyは何も渡していませんが、クラスに直接コードを割り当てるのが最も簡単です。 – mplungjan

+0

あなたの答えは私と同等です:) – Satpal

関連する問題