0

Adobe Flex から来て、ArrayCollection でデータを使用できるようにすることに慣れています。選択したアイテムのデータを表示したい場合は、sourcedata.getItemAt(x) のようなものを使用して、そのインデックスから返されたすべてのデータを取得できます。

ユーザーがデータの行をクリックしたときに探しているphpとjavascriptで作業しています(行にonClickがあるテーブルで、データ変数$resultsを調べて、テキスト入力に値を入力します私の問題は、javascript を使用してすべてのデータを含む変数を調べ、インデックスまたは一致する変数 (たとえば主キー) に基づいて 1 行を取り出す方法がわからないことです。

誰でもこれを行う方法を知っています。元のプルでデータを配信できるときに、「読み取り」クエリを実行しないことをお勧めします。

ありがとう!

4

4 に答える 4

1

大規模な AJAX/JSON リクエストを作成し、指定されたデータを JavaScript で変更します。

以下のコードは、実際のリクエストの例です。JS は、JSON 結果の管理を容易にするために jQuery を使用しています。コンテナオブジェクトは、結果オブジェクトをテーブルなどに入力するためのいくつかのメソッドで拡張できます。

PHP:

$result = array();
$r = mysql_query("SELECT * FROM table WHERE quantifier = 'this_section'");
while($row = mysql_fetch_assoc($r))
  $result[$row['id']] = $row;
echo json_encode($result);

JavaScript + jQuery:

container.result = {};
container.doStuff = function () {
  // do something with the this.result
  console.debug(this.result[0]);
}

// asynchronus request
$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: function(result){
    container.result = result;
  }
});
于 2012-09-30T20:18:17.737 に答える
1

これは良い質問です!AJAXy の概念は非常に単純ですが、バニラ コードで作業していると、埋めるのが不可能に思えるほど多くの穴があります。

最初に行う必要があるのは、HTML で表の各行を識別することです。これを行う簡単な方法は次のとおりです。

<tr class="tablerow" id="row-<?= $row->id ">
  <td><input type="text" class="rowinput" /></td>
</tr>

また、行に一意ではないクラスtablerow. 今すぐ彼らにいくつかの行動を与えましょう!ここでは jQuery を使用しています。これにより、すべての面倒な作業が行われます。

<script type="text/javascript">
$(function(){
  $('.tablerow').click(function(){
    var row_id = $(this).attr('id').replace('row-','');

    $.getJSON('script.php', {id: row_id}, function(rs){
      if (rs.id && rs.data) {
        $('#row-' + rs.id).find('.rowinput').val(rs.data);
      }
    });
  });
});
</script>

次に、script.php次のようなことをしたいと思うでしょう:

$id = (int) $_GET['id'];
$rs = mysql_query("SELECT data FROM table WHERE id = '$id' LIMIT 1");
if ($rs && mysql_num_rows($rs)) {
  print json_encode(mysql_fetch_array($rs, MYSQL_ASSOC));
}
于 2012-09-30T20:20:35.103 に答える
0

DBフィールド名をtd要素に格納し(まあ...ページソースを表示することを気にする人に本番DBフィールド名を公開する理由がないため、わずかに異なるフィールド名)、datasetプロパティを使用して抽出します。

classまたは、代わりに属性を設定することもできます。

PHPは次のよ​​うになります。

<tr>
  <td data-name="<?=echo "FavoriteColor"?>"></td>
</tr>

また

<tr>
  <td class="<?=echo "FavoriteColor"?>"></td>
</tr>

javascriptは次のようになります。

    var Test;
    if (!Test) {
        Test = {
        };
    }
    (function () {
        Test.trClick = function (e) {
            var tdCollection,
                i,
                field = 'FavoriteColor',
                div = document.createElement('div');
            tdCollection = this.getElementsByTagName('td');
            div.innerText = function () {
                var data;
                for (i = 0; i < tdCollection.length; i += 1) {
                    if (tdCollection[i].dataset['name'] === field) { // or tdCollection[i].className.indexOf(field) > -1
                        data = tdCollection[i].innerText;
                        return data;
                    }
                }
            }();
            document.body.appendChild(div);
        };
        Test.addClicker = function () {
            var table = document.getElementById('myQueryRenderedAsTable'),
                i;
            for (i = 0; i < table.tBodies[0].children.length; i += 1) {
                table.tBodies[0].children[i].onclick = Test.trClick;
            }
        };
        Test.addClicker();
    }());

データセットをいじる作業:http://jsfiddle.net/R5eVa/1/

クラスでフィドルを操作する:http://jsfiddle.net/R5eVa/2/

于 2012-09-30T23:09:41.140 に答える
0

たぶん、各行にラジオボタンを付けることができます。JavaScript を使用して、ラジオ ボタン グループの選択に対してアクションをトリガーできます。後ですべてが機能するようになったら、CSS を使用して実際のラジオ ボタンを非表示にし、行全体をラベルにすることができます。これは、行をクリックするとラジオ ボタンが効果的にクリックされることを意味します。このようにして、アクション入力要素があるため、アクセス可能になります。これを非表示にするだけです。

于 2012-09-30T20:06:53.103 に答える