

初心者です。
比較的簡単なデータベース検索システムを作っています。
検索に必要な文字列を入力するテキストフィールドを3つ用意し、各フィールドの横にそれぞれ「検索」ボタンを配置しています。
1番上のテキストフィールドに文字列が入力され、「検索」ボタンが押されたらtest1.txtの中の該当するデータが1番目のテキストフィールドの下に表示され、2番目のテキストフィールドに文字列が入力され、「検索」ボタンが押されたらtest2.txtの中の該当するデータが2番目のテキストフィールドの下に表示され…、という具合です。
この検索システムが1つであれば、望むような結果が表示されるのですが、3つにすると思うように結果が出ません。
「どのボタンが押されたか」を判別するか、もしくは「どのファイルが読み込まれたか」をIF文でうまく組み込めばいいのかとも思いますが…。
どなたか、教えてください。
よろしくお願いします。
<現在のコードです>
findText = "";
function loadDataFile(fName)
{
findText = $("searchText").value; // 検索する文字
new Ajax.Request(fName, { method: 'get', onComplete: displayData });
}
function displayData(httpObj)
{
$("result").innerHTML = parseTabText(httpObj.responseText);
}
// タブ区切りテキストを解析して一致したデータを表示
function parseTabText(tabText)
{
var resultText = "<table border='1' cellpadding='5'>";
var LF = String.fromCharCode(10);// 改行コード (LF)
var TAB = String.fromCharCode(9);// タブコード
var lineData = tabText.split(LF);
for (var i=0; i<lineData.length; i++)
{
var itemData = lineData[i].split(TAB);
var str = itemData[0].match(findText);
if (str)
{
resultText += "<tr><td align='left'>"+itemData[0]
+"</td><td align='left'>"+itemData[1]
+"</td><td align='right'>"+itemData[2]+"</td></tr>";
}
}
resultText += "</table>";
return resultText;
}
<body>
<h1>test1</h1>
<form onSubmit="loadDataFile('test1.txt');return false">
<input type="text" value="" id="searchText">
<input type="button" value="検索" onClick="loadDataFile('test1.txt')"><br>
</form>
<div id="result"></div>
<h1>test2</h1>
<form onSubmit="loadDataFile('test2.txt');return false">
<input type="text" value="" id="searchText">
<input type="button" value="検索" onClick="loadDataFile('test2.txt')"><br>
</form>
<div id="result"></div>
<h1>test3</h1>
<form onSubmit="loadDataFile('test3.txt');return false">
<input type="text" value="" id="searchText">
<input type="button" value="検索" onClick="loadDataFile('test3.txt')"><br>
</form>
<div id="result"></div>
No.1ベストアンサー
- 回答日時:
・ id属性は、ユニークである必要があります。
次のようにしてみてはどうでしょうか。
------------------------------------------------------------
<html>
<head>
<script type="text/javascript">
<!--
var findText = "";
var resultNUM;
function loadDataFile(num) {
var fName = 'test' + num + '.txt'
findText = $("searchText"+num).value; // 検索する文字
resultNUM = "result" + num;
new Ajax.Request(fName, {method:"get", onComplete:displayData});
}
function displayData(httpObj) {
$("resultNUM").innerHTML = parseTabText(httpObj.responseText);
}
// タブ区切りテキストを解析して一致したデータを表示
function parseTabText(tabText) {
var resultText = "<table border='1' cellpadding='5'>";
var LF = String.fromCharCode(10); // 改行コード (LF)
var TAB = String.fromCharCode(9); // タブコード
var lineData = tabText.split(LF);
for (var i = 0; i < lineData.length; i++) {
var itemData = lineData[i].split(TAB);
var str = itemData[0].match(findText);
if (str) {
resultText += "<tr><td align='left'>" + itemData[0] + "</td><td align='left'>" + itemData[1] + "</td><td align='right'>" + itemData[2] + "</td></tr>";
}
}
resultText += "</table>";
return resultText;
}
//-->
</script>
</head>
<body>
<h1>
test1
</h1>
<form onSubmit="loadDataFile('1');return false">
<input type="text" value="" id="searchText1">
<input type="button" value="検索"
onClick="loadDataFile('1')">
<br>
</form>
<div id="result1"></div>
<h1>
test2
</h1>
<form onSubmit="loadDataFile('2');return false">
<input type="text" value="" id="searchText2">
<input type="button" value="検索"
onClick="loadDataFile('2')">
<br>
</form>
<div id="result2"></div>
<h1>
test3
</h1>
<form onSubmit="loadDataFile('3');return false">
<input type="text" value="" id="searchText3">
<input type="button" value="検索"
onClick="loadDataFile('3')">
<br>
</form>
<div id="result3"></div>
</body>
</html>
この回答への補足
ご回答、ありがとうございます。
作成していただきました上記のスクリプトをペーストして動作させてみたところ、「検索」ボタンをクリックしても動作しません。
なにぶん、初心者なので、
どの箇所を修正すればいいのかもわからず…。
すみません。
No.2
- 回答日時:
・ resultNUM は、変数であり使い方が間違っていました。
大変申し訳ありません。function displayData(httpObj) {
$("resultNUM").innerHTML = parseTabText(httpObj.responseText);
}
ではなく
function displayData(httpObj) {
$(resultNUM).innerHTML = parseTabText(responseText);
}
です。
・ Ajaxを利用しているので、関数$()も使えるようにはなっていると思います。このソースコードのままでは動きません。
・ var str = itemData[0].match(findText);
は、タブ区切りの最初のデータからのみ検索しているようですね。
・ itemData[1],itemData[2], ... は、括弧を検索文字列に挿入したときに返されますが、現在は何も入っていません。
ありがとうございます!
無事、解決しました!
このような便利なシステムを作りこんでいくと、いろんなケースが出てきて完成するまでに時間がかかりますね。
JavaScriptも奥深くて迷うことだらけですが、
がんばりたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
value.replaceがうまく動作しま...
-
value内に変数を入れたい
-
Kintone(キントーン)でドロップ...
-
どのボタンがクリックされたの...
-
大量のselect要素のvalueを短い...
-
jsで、配列内の文章を改行する...
-
setIntervalの間隔を途中で変更...
-
chatのコメント欄を空白にでき...
-
JavaScriptでセレクトボックス...
-
VB.NET DateTimeの型について
-
フォームの必須項目を埋めるま...
-
selectboxのoptionタグのvalue...
-
セレクトボックスの初期選択状...
-
【続】ダミーフォームの内容を...
-
フォーム内で記入したクエリ送...
-
return trueとreturn falseの用...
-
プルダウン 項目が多いので先頭...
-
未入力のテキストエリア
-
onchangeイベントを強制的に発...
-
tableの任意行にfocusをあてる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
value内に変数を入れたい
-
hiddenのvalueの値を変えたい
-
複数のsubmitボタンで押された...
-
eval()を使わずに数値を取得し...
-
javascriptでhiddenに二次元配...
-
switchを使って四則演算のプロ...
-
どのボタンがクリックされたの...
-
VB.NET DateTimeの型について
-
フォームで入力した値を別のフ...
-
name属性が同じフォームが複数...
-
Javascriptの小ウインドウから...
-
selectboxのoptionタグのvalue...
-
setIntervalの間隔を途中で変更...
-
子から親へチェックボックスの...
-
プルダウン選択時、既に入力済...
-
ループで連続したフォームの値...
-
プルダウンで作文!?
-
チェックボックスのvalueをテキ...
-
チェックボックスの値について
-
ExcelVBA 動的配列について
おすすめ情報