适当的方式来附加类和& AJAX呼叫

时间:2013-01-17 20:07:35

标签: javascript jquery

好的,所以我真的不认为我正在构建我的JS,并希望有人可以指出我正确的方向。我不认为顺序命名每个列表项的类是一种有效或正确的方法来实现这一点。

我有一个复选框列表,点击后需要执行两个操作:

1)切换位于其正下方的div的类名。

2)通过AJAX发布状态。

以下是我目前的加价:

<ol class="toolkitList">
<li>
            <label><input class="inlineCheckers" type="checkbox" id="checkers" onchange="setCheck();" /><b id="grayTitle">List Title 1</b></label>
                <i id="hiddenDiv">Div content can go here.</i>
        </li>

        <li>
            <label><input class="inlineCheckers" type="checkbox" id="checkers2" onchange="setCheck2();" /><b id="grayTitle2">List title 2</b></label>
                <i id="hiddenDiv2">Div content can go here.</i>
        </li>

        <li>
            <label><input class="inlineCheckers" type="checkbox" id="checkers3" onchange="setCheck3();" /><b id="grayTitle3">List title 3</b></label>
                <i id="hiddenDiv3">Div content can go here.</i>
        </li>

        <li>
            <label><input class="inlineCheckers" type="checkbox" id="checkers4" onchange="setCheck4();" /><b id="grayTitle4">List Title 4</b></label>
                <i id="hiddenDiv4">Div content can go here.</i>
        </li>
    </ol>

这是我目前的JS:

function setCheck() {
var el = document.getElementById("checkers");

if (el.checked) {
    document.getElementById("hiddenDiv").className = "main";
    document.getElementById("grayTitle").className = "titleGray";
 } else {
    document.getElementById("hiddenDiv").className = "";
    document.getElementById("grayTitle").className = "";
 }
}

function setCheck2() {
var el2 = document.getElementById("checkers2");

if (el2.checked) {
    document.getElementById("hiddenDiv2").className = "main";
    document.getElementById("grayTitle2").className = "titleGray";
 } else {
    document.getElementById("hiddenDiv2").className = "";
    document.getElementById("grayTitle2").className = "";
 }
}

function setCheck3() {
var el3 = document.getElementById("checkers3");

if (el3.checked) {
    document.getElementById("hiddenDiv3").className = "main";
    document.getElementById("grayTitle3").className = "titleGray";
 } else {
    document.getElementById("hiddenDiv3").className = "";
    document.getElementById("grayTitle3").className = "";
 }
}

function setCheck4() {
var el4 = document.getElementById("checkers4");

if (el4.checked) {
    document.getElementById("hiddenDiv4").className = "main";
    document.getElementById("grayTitle4").className = "titleGray";
 } else {
    document.getElementById("hiddenDiv4").className = "";
    document.getElementById("grayTitle4").className = "";
 }
}

我意识到我还没有这个设置的AJAX部分,但我想知道这个要求,因为我将很快将该部分添加到代码中。感谢您提供的任何指导!

4 个答案:

答案 0 :(得分:3)

我就是这样做的:

$toolkitlist.on( 'change', '.inlineCheckers', function () {
    $( this ).closest( 'li' ).toggleClass( 'checked', this.checked );
});

其中$toolkitlist是包含OL元素的jQuery对象。请注意我如何在LI元素上设置类,因为这是表示已检查项的最外层元素。您可以使用这些选择器设置“已检查”状态的样式:

/* how they look like initially */
.grayTitle { ... }
.hiddenDiv { ... }

/* how they look like when their check-box is checked */
li.checked .grayTitle { ... }
li.checked .hiddenDiv { ... }

答案 1 :(得分:2)

使用jQuery的addClass

$('#grayTitle3').addClass('titleGray');

使用^=进行更新:

$('[id^=grayTitle]').addClass('titleGray');

答案 2 :(得分:1)

删除内联.onchange ..并将更改事件绑定到您的班级.inlineCheckers - then you can use,这样您就不必为每个集合制作多个功能

$('.inlineCheckers').on('change', function {
  $el = $(this);
  var $hd = $el.closest('label').next('i'); 
  var $gt = $el.next('b');
  $hd.toggleClass('main', $el[0].checked);
  $gt.toggleClass('checkers', $el[0].checked);
}

http://jsfiddle.net/KYzgB/

答案 3 :(得分:1)

您也可以将该类应用于外部div

CSS:

.selected label b {
    color:blue
}
.selected i {
    color:red
}

JS:

$(".inlineCheckers").on('click',function(){
    $(this).parents("li").toggleClass('selected',$(this).is(":checked"));
})

jsfiddle:http://jsfiddle.net/y2rHF/3/