2

私はmvc4とjqueryを使用しています。

行全体を作成してダブルクリックイベントを発生させる方法を見つけようとしています。

私のシナリオは、Person ID、FirstName、Lastnameのパラメーターを含むモデルです。

ただし、htmlテーブルにはFirstNmaeとLastnameのみが表示されます。

個人IDを保存する場所、非表示の場合、JavaScriptとスペースの問題も発生しません。

私の必要性は、行をダブルクリック可能にすることです。そのときはpersonIDを取得し、2番目はエンドユーザーからpersonIDを非表示にすることです。

私が使用したpersonidを取得するために、

$('#EditTable td').dblclick(function () {
    $(this).find('td:eq(1)')
    $(this).find('td:first').text()
}

しかし、値を取得しません。

4

5 に答える 5

8

解決

問題は、要素に対してイベントが発生しているため、td要素をthis参照していることtdです。親を取得してから関数trを呼び出す必要がありfindます。

このようなもの:

$('#EditTable td').dblclick(function () {
    var $this = $(this);
    var row = $this.closest("tr");
    row.find('td:eq(1)');
    row.find('td:first').text();
}); //<-- NOTE: you dont close correctly in your example, which cause console errors

これが実際の例です。


または、代わりにイベントを要素に割り当てることもできtrます。これにより、元の関数コードを保持できます...

$('#EditTable tr').dblclick(...

個人的には、属性を使用して「メタデータ」タイプのものを保存することを好みdataます。例えば:

$('#EditTable td').dblclick(function () {
    var $this = $(this);
    var row = $this.closest("tr");
    var id = row.data("id");
});

次の html テーブルを使用します。

<table id="EditTable">
    <tr data-id="1">
        <td>1</td><td>One</td>
    </tr>
</table>

これは、データ属性を使用した実際の例です。

于 2013-03-04T10:30:16.047 に答える
1

実際には、メソッドを使用してモデルの詳細を DOM ツリーに格納できます$.data('personID',1)。そうすればpersonID、ユーザーから隠すことができます。ユーザー dbl が行をクリックすると、対応するpersonIDlikeが取得されます$.data('personID')

//setting the personID
$.data('personID',2);

//getting the personID
$.data('personID'); //returns 2
于 2013-03-04T10:36:36.657 に答える
0

これを試してください:

 $('#EditTable tr').dblclick(function () {
   $(this).find('td:eq(1)')
   $(this).find('td:first').text()
 });

代わりに反復してみてくださいTRs。それはタイプミスであるか、閉じるときにエラーが発生した可能性があります。});

于 2013-03-04T10:34:10.190 に答える
0

あなたは書く必要があります:

// You want event fired on row `tr` and not on `td`
$('#EditTable tr').dblclick(function () {
    $(this).find('td:eq(1)')
    $(this).find('td:first').text()
}

編集

最善の方法は次のとおりです。

$('#EditTable').on(dblclick, 'tr', function () {
    var $rowClicked = $(this);
    var secondCell = $rowClicked.find('td:eq(1)');
    var textOfFirstCell $rowClicked.find('td:first').text();
}
于 2013-03-04T10:30:37.873 に答える
0

これを試して

$('#EditTable tr').dblclick(function () {
  var $this=$(this);
  $this.find('td:first').text(); //get personid
  $this.find('td:first').hide(); //hide the personrow... u can use remove()
});
于 2013-03-04T10:31:06.197 に答える