2016-04-17 4 views
0

と仮定私は、PHPのループ内<tr><td>と、このようなテーブルがあります。色を変更するとき焦点を当てている内に入力

table tr.active{ 
    background:red; 
} 

:私はCSSを使用しました

//Some code... 
    echo "<table id='rowClick'>"; 
    while($row=mysql_fetch_assoc($result){ 

    echo "<tr><td><input type='text' value='{$row['item']}'></td></tr>"; 
} 
    echo "</table>"; 
//Rest of code 

をそして、JQueryの場合:

<script> 

$(document).ready(function(){ 
    $("#rowClick").children("tbody").children("tr").children("td").keydown(function(){ 
     $(this.parentNode).toggleClass("active"); 
    }); 
    $("#rowClick").children("tbody").children("tr").children("td").keyup(function(){ 
     $(this.parentNode).toggleClass("active"); 
    }); 
}); 
</script> 

私はJQueryに慣れていません。ユーザーが<td>入力フィールド(またはフォーカスしている)を選択すると、いずれの行でも<tr>の色が変更されます。上記のjqueryによれば、私は入力フィールドを選択するたびに赤に変わり、次のものを選択するとデフォルトの表の色に戻ってしまうので、期待どおりに動作します。

+0

私はあなたのKeyDown/keyUpイベントを使用している理由はわかりません。 [focusin](https://api.jquery.com/focusin/)と[focusout](https://api.jquery.com/focusout/)を使いたいと思うようです。また、 'toggleClass'を実行する代わりに、あなたはfocusinで' addClass'を行い、フォーカスアウトで 'removeClass'をやっているはずです。 – David784

+0

私はこれを試してみましょう、私は結果をあなたに戻ってお知らせします! –

答えて

1

私は、これはあなたが探しているものだと思う。私はその後、入力から、私はに最も近い親trをターゲットにしています、フォーカス/ぼかしを探すためにテーブルからinputをターゲットにしています

$(document).ready(function(){ 
    $("#rowClick").find("input").on("focus", function(){ 
     $(this).closest("tr").addClass("active"); 
    }).on("blur", function() { 
     $(this).closest("tr").removeClass("active"); 
    }) 
}); 

ハイライト

JSFiddle

あなたはその代わりにtd代わりに、単にターゲットを強調表示したい場合:

JSFiddle

+0

あなたの答えをありがとう、私はあなたのコードを試して、同じ行の次のフィールドに移動すると、そのデフォルトの色に戻ります(私は '​​の色を変更しました​​色はデフォルトに戻ります)。色は、同じ列を下に移動するときにのみ変化します。 –

+0

@AliHamra、あなたはTRよりも今TDをターゲットにしたいと言っていると思います。 ( 'tr.active'を使用している場合はCSSを変更する必要があります) – smerny

+0

私はあなたの更新された答えを使用しました。どうもありがとう、ちょうど1つの質問は、キーボードの矢印キーを使用して別の入力フィールドに移動するときにも色が変わる可能性がありますか?私は今試してみましたが、これもデフォルトの色に戻ります。私は右または左の矢印を使用していると仮定しています。右今それは上下のキーのみを動作させる...私はとても残念です –

1

あなたは集中していると言いますが、なぜkeydown/keyupを使用するのか理解できません。キーボードイベントに使用されます。 read here

試してみてください。

$("#rowClick tr input").on("focus", function(){ 
    $("#rowClick tr").removeClass("active"); 
    $(this).parents("tr").addClass("active") 

}) 

あなたはTDではないが、TRに、それは意志バブルアップし、行全体の色を変えているので、これはクリーンであるTR上のクリックイベントを割り当てます。

+0

返信いただきありがとうございます。あなたのコードに基づいてありがとうございます。これは、マウスクリックで入力フィールドを選択した場合にのみ機能します。フィールドが常にフォーカスされると、マウスクリックまたはキーイベントによって新しい色が変更されます。 –

+0

確認を編集してください:) – ThunD3eR

+0

ユーザーがフォーカスをページ上の別のアイテム(テーブルの外)に移動すると、これはアクティブなクラスを削除しません。あなたはそれを行うために 'focusout'または' blur'イベントが必要になると思います。 – David784

0

あなたは、その親<tr>をターゲットにフォーカスし、テキストボックスのイベントfocusoutを使用して追加することができます必要に応じてアクティブクラスを削除します。

$(function() { 
    $('#rowClick input').on('focus', function() { 
      $(this).closest('tr').addClass('active'); 
    }).on('focusout', function() { 
      $(this).closest('tr').removeClass('active'); 
    }); 
}); 
0

focusin/focusoutイベントがバブル(ぼかしとは異なります)しているので、実際に入力ではなくtrにリスナーを実際に結びつけることで、単純化できます。これは、同じ行の入力間で変更しても、(同じ行にいなくても...必要ないので)起動しないという利点があります。このように:

$(document).ready(function(){ 
 
    $("#rowClick tr").focusin(function(){ 
 
     $(this).addClass("active"); 
 
    }).focusout(function() { 
 
     $(this).removeClass("active"); 
 
    }); 
 
});
table tr.active{ 
 
    background:red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<table id='rowClick'> 
 
    <tr> 
 
    <td><input type="text"/></td> 
 
    <td><input type="text"/></td> 
 
    </tr> 
 
    <tr> 
 
    <td><input type="text"/></td> 
 
    <td><input type="text"/></td> 
 
    </tr> 
 
    <tr> 
 
    <td><input type="text"/></td> 
 
    <td><input type="text"/></td> 
 
    </tr> 
 
</table>

関連する問題