Jquery: как узнать, какая строка выбрана?

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть таблица с динамически изменяющимися элементами rows.

Среди строк есть маленькая кнопка / ссылка для каждого блока.

Например

    Data1 | LinkButton
   Data2 | LinkButton
   Data3 | LinkButton 
   Data4 | LinkButton
   Data5 | LinkButton 
   Data6 | LinkButton
  

Чего я хочу, так это того, что когда я нажимаю на кнопку ссылки, мне нужно знать, какая строка выбрана?Может ли кто-нибудь дать мне указания на то, как это можно сделать?

Мы будем очень признательны за вашу помощь.

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
    <link href="css/main.css" type="text/css" media="screen, projection" rel="stylesheet" />


</head>
<body><center>
        <div id="message" style="display: none;">
        </div>
        <div id="waiting" style="display: none;">
            Please wait<br />
            <img src="images/ajax-loader.gif" title="Loader" alt="Loader" />
        </div>
        <form action=""  id="searchForm">
            <label for="search">Matter Search:</label> <input type="text" name="search" id="search" />
            <input type="submit" id="submit" value="Submit" />
            <a href="#">Link</a>
        </form>

        <div id="matterTableDiv"  style="display: none;">
            List of Matters
            <table id="matterTable"   border="1">
                <thead>
                <th>Matter Names</th>
                <th>Matter Number</th>
                <th>Description</th>
                <th></th>
                </thead>
                <tbody>

                </tbody>

            </table>
        </div>
        <div id="matterDetailTableDiv" style="display: none;">
            Matter Detail Table
        </div>
        <script type="text/javascript" src="js/json2.js"></script>
        <script type="text/javascript" src="js/jquery-1.4.2.js"></script>

        <script type="text/javascript">

            $(document).ready(function(){


                $('#search').focus();

                $('#submit').click(function(){



                    $('#message').hide(200);
                    $("#matterTableDiv").hide(200);
                    $("#matterTable tbody").text("");
                    $('#waiting').show(200);
                    $('#searchForm').hide(200);
                    $.ajax({
                        type : 'POST',
                        url : 'post.php',
                        dataType : 'json',
                        data: {
                            search : $('#search').val()
                        },
                        success : function(data){
                            if(data.msg == "[]" ){
                                $('#waiting').hide(200);
                                $('#message').removeClass().addClass('error')
                                .text('There was an error.').show(200);
                                $('#searchForm').show(200);

                            }

                            $('#waiting').hide(200);
                            $('#matterTableDiv').removeClass().addClass((data.error === true) ? 'error' : 'success')
                            if(data.error == false){

                                var str = JSON.parse(data.msg);
                                $("#matterTableDiv").show(200);
                                //alert("List :"   str.length);
                                //alert("List :"   str.toString());
                                $("#matterTable").html();

                                $.each(str, function(key, value) {
                                    var tblRow =
                                        "<tr>"
                                        // "<td><a id=" key " href='#dbID=" value.dbID "amp;matID=" value.matterID ">" value.matterInfoSortName "</a></td>"
                                         "<td>" value.matterInfoSortName "</td>"
                                         "<td>" value.matterInfoMatterNum "</td>"
                                         "<td>" value.matterInfoFileDesc "</td>"
                                         "<td><input type='button' value=" value.matterInfoFileDesc "></td>"
                                         "</tr>";
                                    $(tblRow).appendTo("#matterTable tbody");
                                    //alert(key   ': '   value.matterInfoSortName);

                                });

                                $("button").live("click",function(){
                                     var row = $(this).closest("tr");
                                     var rowIndex = row.index();
                                     alert(rowIndex);
                                });

                            }else{
                                $('#message').removeClass().addClass('error')
                                .text('There was an error.').show(200);
                            }

                            $('#searchForm').show(200);

                            if (data.error === true)
                                $('#searchForm').hide(200);
                        },
                        error : function(XMLHttpRequest, textStatus, errorThrown) {
                            $('#waiting').hide(200);
                            $('#message').removeClass().addClass('error')
                            .text('There was an error.').show(200);
                            $('#searchForm').show(200);
                        }
                    });

                    return false;
                });


            });


        </script>

    </center>
</body>
  

Комментарии:

1. Можете ли вы опубликовать HTML-код? Есть несколько способов сделать это, и это облегчит ответ на ваш вопрос.

Ответ №1:

Я знаю, что вы запрашиваете индекс строки, есть пользователи, которые дали вам ответ. Но обычно нам нужен идентификатор строки, потому что идентификатор принадлежит идентификатору в базе данных. В этом случае вы могли бы использовать идентификатор ячейки или саму кнопку. Пример:

   <table>
   <tr  id="Data1"><td>a</td><td>b</td><td>c</td><td><input type="button" value="Data"/></td></tr>
    <tr  id="Data2"><td>a</td><td>b</td><td>c</td><td><input type="button" value="Data"/></td></tr>
    <tr  id="Data3"><td>a</td><td>b</td><td>c</td><td><input type="button" value="Data"/></td></tr>
    <tr  id="Data4"><td>a</td><td>b</td><td>c</td><td><input type="button" value="Data"/></td></tr>
    </table>

    $("input[type=button]").live("click", function() {
       var row = $(this).closest("tr");
       var rowId = row.attr("id");
        alert(rowId);
    });
  

У вас есть это здесь:

http://www.jsfiddle.net/dactivo/YD3xy/

Комментарии:

1. Я обновил свой код, но будет работать, только если вы включите идентификатор в tr. Если нет, вы можете выбрать опцию «index()».

Ответ №2:

Вы можете перейти из this (нажатой кнопки) в обработчике и использовать .closest() для получения <tr> значения кнопки, а затем взять оттуда все, что захотите, например:

 $(".someButton").live("click", function() {
   var row = $(this).closest("tr");
   var rowIndex = row.index();
});
  

Для получения полного списка функций «перемещения», подобных этой, ознакомьтесь с разделом обхода дерева API.

Комментарии:

1. Спасибо! Это прекрасно работает само по себе, но я не могу понять, как заставить это работать в самом проекте. Я все еще нахожусь на стадии обучения этому.

2. Что у меня есть, так это то, что я генерирую таблицу из ответа JSON, вызывая запрос REST. Чего я хочу прямо сейчас, так это того, чтобы при нажатии на одну из кнопок или ссылку, связанную со строками, я запускал другие запросы REST, чтобы получить более подробную информацию . Как бы мне это сделать?

Ответ №3:

Я предполагаю, что вы используете…

 $('.all_links').click(some_function)
  

Итак, в этом случае вы можете просто найти ее изнутри some_function вот так:

 function some_function() {
    $(this).parents('tr'); // this will give you the link's row.
}
  

Комментарии:

1.Это привело бы к получению всех <tr> предков, если бы это была, например, вложенная таблица.