2014-03-27 104 views
1

我正在製作一種幻燈片形式,並且當用戶單擊下一張圖像幻燈片時,還必須選擇單選按鈕。我得到了滑動工作,'下一個按鈕'也在工作,但我有點卡住'prev'按鈕。不明白爲什麼它不起作用。選擇下一個/上一個單選按鈕與外部按鈕

fiddle

這是我走到這一步,HTML:

<form> 
<div> 
    <div class="button prev">&#60;</div> 
    <ul> 
     <li> 
      <input type="radio" id="choise_1" name="first_choise" checked="checked"/> 
      <label for="choise_1">One</label> 
     </li> 
     <li> 
      <input type="radio" id="choise_2" name="first_choise"/> 
      <label for="choise_2">Two</label> 
     </li> 
     <li> 
      <input type="radio" id="choise_3" name="first_choise"/> 
      <label for="choise_3">Three</label> 
     </li> 
    </ul> 
    <div class="button next">&#62;</div> 
</div> 
<div> 
    <div class="button prev">&#60;</div> 
    <ul> 
     <li> 
      <input type="radio" id="choise_1" name="second_choise" checked="checked"/> 
      <label for="choise_1">One</label> 
     </li> 
     <li> 
      <input type="radio" id="choise_2" name="second_choise"/> 
      <label for="choise_2">Two</label> 
     </li> 
     <li> 
      <input type="radio" id="choise_3" name="second_choise"/> 
      <label for="choise_3">Three</label> 
     </li> 
    </ul> 
    <div class="button next">&#62;</div> 
</div></form> 

的jQuery:

$(document).ready(function(){ 
$('.prev').click(function(){ 
    $(this).next().find('input:checked').parent().prev().children('input').attr("checked", true); 
    $(this).next().find('input:checked').last().removeAttr("checked"); 
}); 

$('.next').click(function(){ 
    $(this).prev().find('input:checked').parent().next().children('input').attr("checked", true); 
    $(this).prev().find('input:checked').eq(0).parent().prev().children('input').removeAttr("checked"); 
});}); 
+0

創建小提琴工作,現在你的問題是什麼? –

回答

3

它可以簡化爲

$(document).ready(function(){ 
    $('.prev').click(function(){ 
     $(this).parent().find('input:checked').parent().prev().children('input').prop("checked", true); 
    }); 

    $('.next').click(function(){ 
     $(this).parent().find('input:checked').parent().next().children('input').prop("checked", true); 
    }); 
}); 

演示:Fiddle


同樣使用:有選擇器

$(document).ready(function(){ 
    $('.prev').click(function(){ 
     $(this).parent().find('li:has(input:checked)').prev().children('input').prop("checked", true); 
    }); 

    $('.next').click(function(){ 
     $(this).parent().find('li:has(input:checked)').next().children('input').prop("checked", true); 
    }); 
}); 

演示:Fiddle

+0

英雄,這是工作!謝謝!儘可能接受你的回答。 –

+0

雖然它在工作,但是當我查看瀏覽器中的代碼時,第一個輸入標籤會保持檢查屬性。這會影響結果嗎? –

+1

@PepijnGieles不,它不 –

1

可以使用.prop()代替.attr(),您可以簡化爲這樣:

$(document).ready(function(){ 
    $('.prev').click(function(){ 
     $(this).next().find(':checked').parent().prev().find('input').prop("checked", true); 
    }); 

    $('.next').click(function(){ 
     $(this).prev().find(':checked').parent().next().find('input').prop("checked", true); 
    }); 
}); 
+0

在視覺上它正在工作,但是當我在瀏覽器中查找代碼時,第一個輸入標記不斷檢查屬性..這會影響結果嗎? –

+1

哦!看看您是否在瀏覽器中看到頁面源代碼,然後會顯示頁面加載時可用的默認標記。所以在頁面加載的時候你的第一個輸入被檢查過,所以你可以在源代碼中看到,但你必須使用firebug/chromeinspector來查看更改。 – Jai

相關問題