-1

SQL-PHP で印刷されたテーブルがあり、テーブルの上部に選択があります。テーブルには、町ごとに分類された連絡先が含まれています。

最初に、テーブルにはすべての連絡先が表示されます。町を指定したら残りは隠したい。

jQueryスクリプトを使用しようとしています

    <script>
    function updateit(){
    if ($("#table").filter("tr") === $("#selectTown").val()) $(this).show(););
    else {$(this).hide();};
    }        
    </script>

    [...]
    <select id="selectTown" onchange="updateit()"><option value="NY">New York</option><option value="TX">Texas</option></select>
    <table id="table">
    bla bla bla...
    </table>

関数を試す前にfind()、成功しませんでした。

助言がありますか?

4

2 に答える 2

0

あなたがこのコードのアイデアをどこから得たのかはfilter()わかりませんが、あなたが思っているようなことをしていないことは間違いありません。 テーブル内の要素$("#table").filter("tr")のリストが表示されます。trそのリスト自体は、選択された値と等しくなるわけではなく、単なる要素の配列です。

jsFiddle hereでいくつかのものをモックアップすると、おそらく次のようなものが必要になります。

$('#selectTown').change(function () {
    $('#table tr').hide();
    $('#table tr').filter(function () {
        return $(this).find('td:first').text() === $('#selectTown').val();
    }).show();
});

これが行うことは次のとおりです。

  1. change要素のイベントにバインドしselectます (これは、一般的に、マークアップで行うインライン バインディングよりも優先されます)。
  2. 最初にすべてのtr要素を非表示にすると、必要な要素がすぐに表示されます。
  3. フィルタに一致するすべてのtr要素を表示します。

この場合のフィルターはtrue、要素内のテキストtd(おそらくそのセレクターを更新する必要があります) が選択された値と等しいかどうかを返す関数です。ここで試したものとの主な違いは.filter()、比較する実際の値ではなく、一致した (フィルター処理された) 要素のリストを返すことです。フィルターの内部で比較が行われます。この場合は関数を使用します (フィルター処理される特定の要素に対して true または false を返す必要があります)。

于 2013-10-28T15:26:45.853 に答える
0

この行$("#table").filter("tr") === $("#selectTown").val()はドキュメント要素を文字列と比較しますが、機能しません。

最も簡単な解決策は、すべての要素を非表示にし、一致するすべての要素を選択して表示することです。例:

$('tr').hide();
$('tr[value=' + $("#selectTown").val() + ']').show();
于 2013-10-28T15:26:49.707 に答える