以下のコードなのですが現在地を取得してリスト化して保存するというものです
追加された<a>の横に削除ボタン(del_btn)を設置し、押されたらリストを削除をいう風にしたいのですが
どうしてもできません
コードの下部の
//削除ボタンが押されたとき
の部分の正しい記述がわかりません
ご教授お願いします
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, user-scalable=no">
<script src="components/loader.js"></script>
<link rel="stylesheet" href="components/loader.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body bgcolor="#C2F2A5">
<center>
<font face="HG創英角ポップ体">
<h1>ブックマークMAP</h1>
</center>
<div id="new_div">
<span id="name">場所:<input id="name_txt" type="text" value="" size="20" /><br /></span>
</font>
<input id="save_btn" type="button" value="記録" />
</div>
<div id="list_div">なし</div>
<script>
function $(id) { return document.getElementById(id); }
//初期処理
var items = [];
window.onload = function() {
if (window.localStorage == undefined &&
navigator.geolocation == undefined) {
alert("HTML5未対応端末です"); return;
}
//既存リスト表示
var list = localStorage.getItem("shoplist");
if (list == null) {
list = "";
}else{
items = list.split("\n");
showItems();
}
//記録ボタン、削除ボタンを押したときの設定
$("save_btn").onclick = save_btn_clickHandler;
$("del_btn").onclick = del_btn_clickHandler;
};
//ブックマーク一覧の表示
function showItems() {
var map_url = "http://maps.google.co.jp/maps?q=";
var html = "<ul>";
for (var i in items) {
var data = items[i].split("\t");
var name = data[0];
var lat = data[1]
var lon = data[2]
var link = "<a href='"+map_url+lat+","+lon+"'>"+name+"</a>";
html += "<li>"+link+"<input id='del_btn' type='button' value='削除'>"+"</li>";
}
html += "</ul>";
$("list_div").innerHTML = html;
}
//保存ボタンを押したときの設定
function save_btn_clickHandler() {
if ($("name_txt").value == "") {
alert("場所を入力してください"); return;
}
//位置情報の取得
navigator.geolocation.getCurrentPosition(
successCallback,
errorCallback);
$("save_btn").value = "現在地取得中"
}
//成功したとき
function successCallback(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var name_txt = $("name_txt");
//場所+位置情報を保存
var item = name_txt.value + "\t" + lat + "\t" + lon;
items.push(item);
var list = items.join("\n");
try {
localStorage.removeItem("shoplist");
localStorage.setItem("shoplist", list);
} catch (err) {
alert("保存失敗");
}
$("save_btn").value = "記録";
name_txt.value = "";
showItems();
}
//失敗したとき
function errorCallback(err) {
alert("失敗("+err.code+")"+err.message);
$("save_btn").value = "記録";
}
//削除ボタンが押されたとき
function del_btn_clickHandler(){
delete "<'a'>";
}
</script>
</body>
</html>
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ざっと見ただけなので、全体をちゃんと把握してませんが…
>html += "<li>"+link+"<input id='del_btn' type='button' value='削除'>"+"</li>";
だと id="del_btn" の要素が複数生成されてしまいますが、HTML文法違反になります。
class設定などを利用するか、個別にイベントを設定するかなどにしてください。
その結果、
>$("del_btn").onclick = del_btn_clickHandler;
のイベント設定も不適切になっています。
(save_btnのほうは一つでしょうから、このままでOKです)
削除の処理に関しては、クリックされた要素の親要素(LI要素)を削除するという内容にしておけば宜しいかと思います。
個別にイベントを設定する場合、onclickなどだとイベントハンドラにイベントオブジェクトが渡されないブラウザがありますので、
onclick="del_btn_clickHandler(this)"
onclick="del_btn_clickHandler(event)"
などとしてハンドラ側で引数として取得できるようにしておくのがよさそうです。
addEventListnerなどを用いて設定すれば、第一引数にイベントオブジェクトが渡されます。
function del_btn_clickHandler(elm){
//elmにクリック時の要素が渡されると仮定すると
while(elm && elm.nodeName != "LI") elm = elm.parentNode;
if(elm) elm.parentNode.removeChild(elm);
}
のような要領で、ご希望の動作になると思います。
この回答への補足
>id="delbtn"
→class="del_btn"
>$("del_btn").onclick = del_btn_clickHandler;
→onclick="del_btn_clickHandler(this)"
onclick="del_btn_clickHandler(event)"
に変更して残りの部分を書き加えるということでよろしいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 画像の表示位置 3 2022/12/23 08:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み込んだQRコードをフォーム...
-
特定の文字列を複数抜き出した...
-
var exports = exports || {}; ...
-
ローディングアニメーションの...
-
GASでチェックボックスを一括of...
-
追加ボタンを押した際に ok ボ...
-
①入力フォーム→②確認表示画面→③...
-
GASに文字列として関数を入れる...
-
GASでGoogleフォームの自動返信...
-
React hooksが値を返して配列変...
-
初心者です。gulpでコンパイル...
-
ジャバスクリプトについて。
-
プログラムについて。
-
HTMLタグに複数のクラスを設定...
-
Googleフォームで選択肢に応じ...
-
ボタンを押したあとに画像を表...
-
disabled プロパティが表示され...
-
出発駅A、到着駅Bを選択すると...
-
Colorboxがうまく設置できません
-
Cookieに保存されない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列を使って順位をだす...
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
-
メールフォームの日付入力フォ...
-
iOSのみダブルタップが必要
-
ジャバスクリプトについて。
-
画面遷移を行わずに同一ページ...
-
特定の文字列を複数抜き出した...
-
指定時間になったら、WEBサイト...
-
追加ボタンを押した際に ok ボ...
-
①入力フォーム→②確認表示画面→③...
-
スマホ上で、左右スワイプで次...
-
読み込んだQRコードをフォーム...
-
フロントエンドフレームワーク...
-
React hooksが値を返して配列変...
-
GASでGoogleフォームの自動返信...
-
初心者です。gulpでコンパイル...
-
階層別の組織図の自動作成について
-
HTMLで作った時報アプリが動き...
-
jQueryで同じクラス名のものを...
おすすめ情報