2014-03-03 51 views
0

我有一個有組織的表格,顯示用戶最喜歡的星期幾。用Jquery讀取字符串並根據字符串更改複選框的狀態

http://jsfiddle.net/Y4wGG/1/

當你點擊要編輯的行彈出的div屏幕將提出自己。 我想要做的是讀取「Days」列的內容,並選中與字符串相關的彈出屏幕內的框。

M = Monday 
T = Tuesday 
W = Wednesday 
Th = Thursday 
F = Friday 

例:M,W,F =週一,週三,週五

的符號永遠是逗號分隔。在這個例子中,M,W和F旁邊的複選框將被檢查。

格式

<label for="new_friday">F</label> &nbsp; <input type="checkbox" id="new_friday" name="f" value="f"> &nbsp; 

回答

3

我冒昧地重構了大部分代碼。希望它可以幫助

// These elements don't change so no point getting them on each click 
var modal = $('#transparent').on('click.close', function() { 
     $(this).hide(); // hide the element on click 
    }), 
    username_input = modal.find('input[name=username]'), 
    email_input = modal.find('input[name=email]'), 
    day_checkboxes = modal.find('input[type=checkbox]'); 

$('#close').on('click', function() { 
    modal.trigger('click.close'); // trigger the "close" click event 
}); 
$('#splash').on('click', function(e) { 
    e.stopPropagation(); // don't allow clicks to leave the #splash element 
}); 

$('.data').on('click', function(e) { 
    // Get all the data from within this element (row) 
    var row = $(this), 
     username = row.find('.row_user').text(), 
     email = row.find('.row_email').text(), 
     days = row.find('.row_days').text().toLowerCase(); 

    // split the days by comma, defaulting to an empty array 
    days = days.length && days.split(',') || []; 

    modal.show(); 
    username_input.val(username); 
    email_input.val(email); 

    day_checkboxes.prop('checked', function() { 
     // looks for the "value" in the days array and sets the "checked" property 
     return ~days.indexOf(this.value); 
    }); 
}); 

演示 - http://jsfiddle.net/Y4wGG/7/

+0

不錯的重構,但是,我不確定OP是否能夠理解和欣賞它。 –

+2

@SamuelLiew添加評論 – Phil

+0

我當然感謝你的努力,絕對不明白:D lol –

0

添加到您的功能,最好在那裏你複製的用戶名和電子郵件領域的部分:

var days = $('#' + id + ' .row_days').text().toLowerCase().split(','); 

$('#splash input:checkbox').each(function() { 
    $(this).prop('checked', 
     $.inArray($(this).val(), days) >= 0 
    ); 
}); 

http://jsfiddle.net/Y4wGG/5

0

這是你的答案,只需添加下面的代碼在電子郵件位之後。

 var days = $(this).find("td.row_days").text().toLowerCase().split(","); 
     $.each(days, function() { 
      alert(this); 
      $("input[name='"+this+"']").attr("checked", "checked"); 
     }); 
+0

你真的發佈之前測試呢? –

+0

是的。爲什麼會有問題? –

+0

我假設你要求它不檢查框,一旦檢查它確定重置不會是一個問題。 –