2014-03-31 324 views
0

所以這裏是我的表單的樣子。選中一個複選框,選中另一個複選框

http://jsfiddle.net/jFN5T/5/

和JS我想:

$('#work_direction').on('click' , function() { 

    $('.cad, .design, .shop, .cnc').on('click', function(){ 

     $classname = $(this).attr('class'); 
     if($('.' + $classname + ":checked").length > 0){ 
      $('#' + $classname).attr('checked','checked'); 
     } else { 
      $('#' + $classname).removeAttr('checked'); 
     } 
    }); 

}); 

即使世界一些功能存在,並且據我所知的作品。不過,我想使它這樣,當「墨」在方向,當用戶關閉檢查S的選擇 - SHOP或M - CNC,它不應該檢查了這兩個在部門影響

  • 店(John Doe的[3])
  • CNC(John Doe的[4])

而是應該覈對

  • MEXI co(John Doe [7])

該窗體應該像國內和海外一樣工作,當底部的C,D,S,M檢查結束時,頂部的CAD,Design,商店,數控,得到檢查。當用戶選擇「墨西哥」作爲方向時,功能如上所述變化。

這是我試過的代碼,Check and uncheck checkbox not working correctly,但我在beautifulcoder的評論中描述過的問題:「基本上,我認爲你遇到了事件冒泡的問題,如果你使用live(),jQuery將會添加事件,未來,下次你添加一個事件時,它會被追加到列表中。「

我不知道如何實施修復或者是否有更好的方法。

+0

它們是否與類名稱具有相同的ID? – pj013

+0

@ jp310是的,除了「墨西哥」有id墨西哥 – MikeOscarEcho

回答

1

change事件儘管可能有事件冒泡(因爲你每增加一個新的onClick()功能的基本問題點擊下拉菜單的時間),我相信你正在攻擊錯誤的問題。看看你的代碼:

$classname = $(this).attr('class'); 
if($('.' + $classname + ":checked").length > 0){ 
    $('#' + $classname).attr('checked','checked'); 
} else { 
    $('#' + $classname).removeAttr('checked'); 
} 

這部分抓取當前元素的類名並檢查它是否被檢查。 然後它找到其ID與其自己的類名稱匹配的元素,並檢查或取消檢查它。在您的示例中,除非您的CNC複選框的類名稱爲mexico,否則將永遠不會選中ID爲mexico的元素。此外,在代碼中無處可更改下拉選擇框的值更改時這些類名稱。

我建議如果您可以使用HTML5,請使用它提供的data feature。這將允許您指定應檢查哪些元素,而不會有衝突或不正確的ID /類名稱。

下面是它的一個例子在行動:JSFiddle

jQuery的的例子:

$('#work_direction').on('change', function() { 
    if ($(this).val() == 'mexico') { 
     $('.shop, .cnc').data('check', 'mexico'); 
    } 
    else { 
     $('.shop').data('check', 'shop'); 
     $('.cnc').data('check', 'cnc'); 
    } 
}); 

$('.cad, .design, .shop, .cnc').on('change', function() { 
    // Split into space-delimited array in case we want 
    // to check off more than one 
    var elemsToCheck = $(this).data('check').split(' '); 
    var checked = $(this).attr('checked'); 
    $.each(elemsToCheck, function() { 
     $('#' + this).attr('checked', !!checked); 
    }); 
}); 

我的例子也允許在data-check屬性指定多個複選框。只需用空格分隔每一個。

+0

哇這很酷。它現在可以工作,並將在稍後的另一頁中提及。謝謝Nate! – MikeOscarEcho

0

看看加之prop功能,像這樣

$('#work_direction').on('change' , function() { 
    var direction = $(this).val(); 
    $('#'+direction).prop('checked', true); 
}); 

http://jsfiddle.net/jFN5T/7/

+0

看起來不錯,但是當墨西哥方向改變時,這會檢查墨西哥(John Doe [7])。我正在尋找墨西哥(John Doe [7]),以便在方向是墨西哥和CNC或SHOP在底部檢查時進行檢查。 – MikeOscarEcho

+0

那麼用戶點擊這些事情的順序是什麼?他們選擇方向,然後檢查CNC和/或SHOP。那麼它會自動檢查John Doe [7]?是否允許用戶手動點擊John Doe [7]旁邊的檢查?否則CNC和車間等的應該是工作人員的useabilty – haxxxton

+0

上面我同意100%,你說什麼,我是當我發現,管理者甚至不點擊下受影響的部門的複選框有點驚慌。不幸的是,它很難改變他們的方式,更不用說讓他們在提交表格之前進行仔細檢查。過程如下:工作方向 - >部門以及他們在部門覈對的任何內容,都應檢查其上方的「受影響的部門」複選框。 – MikeOscarEcho

相關問題