0

你好 StackOverflow 的好人,

提前为我的愚蠢行为道歉,但我需要你的帮助。

我有一个由 SQL 查询生成的表,用户需要能够选择一行,它将一个值传递到隐藏的文本框中。这一点我已经成功了,但是我需要显示他们选择了哪一行,如果他们改变主意然后选择了不同的行,那么只有新行会突出显示。

我知道这应该是非常基本的,但我无法弄清楚逻辑。到目前为止,我有这个:

function getOLBC(olbc)
{
    document.getElementById("ANSWER.TTQ.MENSYS.1.").value=olbc;
    var rows = document.getElementById("results").getElementsByTagName("tr").length;
    for (var i =0; i < rows; i++)
    {
        var answer = document.getElementById("ANSWER.TTQ.MENSYS.1.").value
        if (answer = olbc)
        {
            document.getElementById(olbc).style.background="red";
            document.getElementById(olbc).style.color="white";
        }
        else 
        {
            document.getElementById(olbc).style.background="white";
        }
    }
}

HTML 如下所示:

    <tr class="unselected" id="AL-AAA98"onclick="getOLBC('AL-AAA98')"><td class="OLBC">AL-AAA98</td><td>AAAL</td><td>Grade A in Economics<br />Grade A in Mathematics<br />Grade A in Business Studies</td><td></td></tr>
    <tr class="unselected" id="AL-AAA77"onclick="getOLBC('AL-AAA77')"><td class="OLBC">AL-AAA77</td><td>AAAL</td><td>Grade A in Economics<br />Grade A in Mathematics<br />Grade A in Spanish</td><td></td></tr>
    <tr class="unselected" id="AL-AAA42"onclick="getOLBC('AL-AAA42')"><td class="OLBC">AL-AAA42</td><td>A*AAL</td><td>Grade A in Mathematics<br />Grade A in Human Biology<br />Grade A in Physics</td><td></td></tr>                                                                             

任何人都可以帮忙吗?为这个问题的n00bish-ness道歉。

谢谢!

4

3 回答 3

2

我认为这就是您要寻找的...我删除了 onclick dom 元素(最好将 js 与 dom 分开)。

使用 jquery:http: //jsfiddle.net/cr1urhv6/

$("#myTable tr").click(function(e) {
  $("#myTable tr").removeClass("highlight");
  $(this).addClass("highlight");
});

或纯js:http: //jsfiddle.net/cr1urhv6/1/

var rows = document.querySelectorAll("#myTable tr");
for (var i = 0; i < rows.length; i++) {
    rows[i].addEventListener('click', function() {
        [].forEach.call(rows, function(el) {
            el.classList.remove("highlight");
            });
        this.className += ' highlight';
    }, false);
}

这是删除任何当前突出显示...然后将突出显示类添加到我们在其中单击的 TR。

于 2013-03-28T15:13:05.133 回答
1

尝试做

if (answer == olbc)  

代替

if (answer = olbc)  
于 2013-03-28T13:45:36.127 回答
0

我最终也进行了足够的修补以找到自己的解决方案,这可能不如 Smerny 的答案那么优雅,但它是:

    function getOLBC(olbc){
    var selectedCount = document.getElementsByClassName("selected").length;

    if (selectedCount <= 0)
        {
        document.getElementById("ANSWER.TTQ.MENSYS.1.").value=olbc;
        document.getElementById(olbc).className="selected"
        }
    else 
        {
        var selectedRow = document.getElementsByClassName("selected")[0].id
        document.getElementById(selectedRow).className="deselected";
        document.getElementById("ANSWER.TTQ.MENSYS.1.").value=olbc;
        document.getElementById(olbc).className="selected"
        }
于 2013-03-28T15:20:37.983 回答