选择多行时突出显示每一行

时间:2011-05-01 07:14:45

标签: javascript jquery checkbox

我正在使用此Jquery代码一次选择多行。如您所见,我尝试使用代码“lastChecked.style.background =”yellow“;”更改背景颜色但它不起作用。我该怎么做?

var lastChecked = null;

$(document).ready(function() {
        $('.chkbox').click(function(event) {
                if(!lastChecked) {
                        lastChecked = this;
                        return;
                }

                if(event.shiftKey) {
                    var start = $('.chkbox').index(this);
                    var end = $('.chkbox').index(lastChecked);

                    for(i=Math.min(start,end);i<=Math.max(start,end);i++) {
                                $('.chkbox')[i].checked = lastChecked.checked;
                                lastChecked.style.background = "yellow";
                        }
                }

                lastChecked = this;
        });
});

以下是所有使用的代码:

{% extends "base.html" %}
{% block title %}Most Common Calls | CPRS Help{% endblock %}
{% block script %}
<script type="text/javascript">
/*<![CDATA[*/
function highlight_row(row_id,checkbox)
{
  var row = document.getElementById(row_id);
  row.style.background = checkbox.checked ? "yellow" : ""; 
}

function unhighlight_row(row_id)
{
  var row = document.getElementById(row_id);
  row.style.background = "white"; // background yellow
}
/*]]>*/
</script>
{% endblock %}
{% block content %}
<h2>Most Common Calls</h2>
<form action="/mark_as_uninteresting/" method="post">
{% csrf_token %}
<table class="calls">
<tr><th style="width:30px">N</th><th>Word</th><th style="width:150px;"><input class="searchbutton" type="submit" value="Mark as Uninteresting" /></th></tr>
{% for word in word_frequencies %}
<tr id="row_{{ forloop.counter }}"><td>{{ word.n }}</td><td style="padding:0;"><a href="/search/?q={{ word.word }}" style="padding:5px;display:block;color:blue;">{{ word.word }}</a></td><td style="text-align:center"><input type="checkbox" name="checkbox_{{ word.id }}" onclick="highlight_row('row_{{ forloop.counter }}',this)" id="id_chk{{ forloop.counter }}" class="chkbox" /></td></tr>
{% endfor %}
</table>
</form>
<script type="text/javascript" src="/media/js/jquery-1.5.2.min.js"></script>
<script type="text/javascript">
    var lastChecked = null;

    $(document).ready(function() {

            $('.chkbox').click(function(event) {
                    if(!lastChecked) {
                            lastChecked = this;
                            return;
                    }

                    if(event.shiftKey) {
                        var start = $('.chkbox').index(this);
                        var end = $('.chkbox').index(lastChecked);

                        for(i=Math.min(start,end);i<=Math.max(start,end);i++) {
                                    $('.chkbox')[i].checked = lastChecked.checked;
                            }
                    }

                    lastChecked = this;
            });
    });
</script>
{% endblock %}

1 个答案:

答案 0 :(得分:-1)


更新的解决方案:

好的,现在你的问题更清楚了,这是正确的解决方案:

如果您希望使用shift键选择行时具有背景颜色,则需要更改此行:

lastChecked.style.background = "yellow";

到→

$('.chkbox')[i].parentNode.style.backgroundColor='yellow';

OR

$('.chkbox').eq(i).parents('tr').style.backgroundColor='yellow';


您的版本尝试在复选框上设置背景颜色。这是不可能的。您需要选中复选框的父节点。

我的解决方案中的第一个版本将定位复选框的直接父级。如果您的<tr>仅深入一级,则可以在您的情况下使用。但是,如果您的<tr>可以更深入(即复选框可能位于<span>中,然后在<tr>内),则应使用第二个版本,该版本会搜索复选框<tr>元素的祖先,然后设置背景。