的「click」事件被分配到你的「圖像唱首歌」元素中,但「點擊」類添加到隱藏字段。元素引用被混淆了,並且代碼需要檢查圖像是否已被點擊。
這可能是更接近你想要做什麼:
<script>
$('.image-clicker').click(function() {
$('#ranking').val($(this).data('ranking'));
var already_clicked = $(this).hasClass('clicked');
$('.clicked').removeClass('clicked')
if (!already_clicked) {
$(this).addClass('clicked');
}
});
</script>
的already_clicked
檢查確定圖像已被點擊,它可以清除現有的「後告知是否繼續點擊點擊其他圖像中的課程。
請注意,這將允許所有圖像變成'未點擊'。如果你希望它的行爲像單選按鈕一樣,你可以省去already_clicked
的檢查,並且總是將「clicked」類添加到被單擊的元素。這將做到這一點:
<script>
$('.image-clicker').click(function() {
$('#ranking').val($(this).data('ranking'));
$('.clicked').removeClass('clicked')
$(this).addClass('clicked');
});
</script>
在這種情況下,你可能還想在已知的狀態下啓動你的單選按鈕。在原始標記(ERB)中,您希望將「已點擊」類添加到image_tag
元素之一。您只需在「點擊」類添加到圖像中的一個在創建時,就像這樣:
<%= f.hidden_field(:ranking, id: 'ranking') %>
<%= image_tag('4.png', data: { ranking: 4 }, class: 'image-clicker clicked']) %>
<%= image_tag('3.png', data: { ranking: 3 }, class: 'image-clicker') %>
<%= image_tag('2.png', data: { ranking: 2 }, class: 'image-clicker') %>
<%= image_tag('1.png', data: { ranking: 1 }, class: 'image-clicker') %>
你也可以這樣做動態的基礎上,從模型中的變量或字段的值。假設一個名爲ranking
變量包含此值,考慮這個初始化代碼:
<%= f.hidden_field(:ranking, id: 'ranking') %>
<%= image_tag('4.png', data: { ranking: 4 }, class: 'image-clicker' + (ranking == '4' ? ' clicked' : '')) %>
<%= image_tag('3.png', data: { ranking: 3 }, class: 'image-clicker' + (ranking == '3' ? ' clicked' : '')) %>
<%= image_tag('2.png', data: { ranking: 2 }, class: 'image-clicker' + (ranking == '2' ? ' clicked' : '')) %>
<%= image_tag('1.png', data: { ranking: 1 }, class: 'image-clicker' + (ranking == '1' ? ' clicked' : '')) %>
你試過用toggleClass()方法嗎? – uday
是啊@uDaY我試過'$'''排名')。toggleClass('clicked');' –
嘗試和緩存你的jQuery選擇到性能變量,例如$排名和$這 –