旅館サイトに予約ページを作ろうとしていて(もちろん依頼されたものなどではないです)、
jspでaタグのonclick属性に指定した関数が呼び出されず,コンソールにエラーメッセージ[TypeError: register is not a function]がでます。
htmlを見ても、javascriptを見ても間違いが見当たりません。試しにテスト用の関数を用意して試してみましたがそちらは呼ばれました。
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<%@ page import="java.util.*" %> 5 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>Insert title here</title> 10</head> 11<body> 12<table> 13<tr><th>部屋名</th><th>宿泊料金</th><th>空席状況</th></tr> 14<% 15@SuppressWarnings("unchecked") 16List<Map<String,String>> list = (List<Map<String,String>>) request.getAttribute("list"); 17System.out.print("obj:"+request.getAttribute("list")); 18for(Map<String,String> m : list){ 19%> 20<tr> 21<td><%=m.get("roomName") %></td> 22<td><%=m.get("price") %></td> 23<td><%if(m.get("isVacant").equals("○")){%> 24<a href="javascript:void(0);" onclick='register(<%=m.get("roomID") %>,"<%=m.get("roomName")%>");'>○</a> 25<%}else{%> 26<%=m.get("isVacant")%> 27<% } %> 28</td> 29<% } %> 30</table> 31<form name="register" action="register_booking_confirm" method="get"> 32<input hidden="" name="data" value=""> 33<input hidden="" name="roomName" value=""> 34</form> 35</body> 36</html>
↓ 実際に表示されたページのコード
html
1<html> 2<head> 3<meta charset="UTF-8"> 4<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 5<script type="text/javascript" src="js/register_booking.js"></script> 6<!-- 略--> 7</head> 8<body> 9<!-- 略 --> 10<table> 11<tbody><tr><th>部屋名</th><th>宿泊料金</th><th>空席状況</th></tr> 12 13<tr> 14<td>桐の間</td> 15<td>13000</td> 16<td> 17<a href="javascript:void(0);" onclick="register(11,"桐の間");">○</a> 18 19</td> 20 21</tr><tr> 22<td>杜若の間</td> 23<td>13000</td> 24<td> 25<a href="javascript:void(0);" onclick="register(12,"杜若の間");">○</a> 26 27</td> 28 29</tr><tr> 30<td>洋室シングル</td> 31<td>10000</td> 32<td> 33<a href="javascript:void(0);" onclick="register(21,"洋室シングル");">○</a> 34 35</td> 36 37</tr></tbody></table> 38<form name="register" action="register_booking_confirm" method="get"> 39<input name="data" value="" hidden=""> 40<input name="roomName" value="" hidden=""> 41</form> 42 43</div> 44 45</body></html>
js
1/** 2 * 3 */ 4 5function lookfor(){ 6 var arr={ 7 visitor : document.getElementById("visitor").value, 8 checkIn : document.getElementById("checkIn").value, 9 checkOut : document.getElementById("checkOut").value, 10 }; 11 // Assign handlers immediately after making the request, 12 // and remember the jqxhr object for this request 13 var jqxhr = $.post( "register_booking", arr ,function(data) { 14 document.getElementById("list-area").innerHTML = data; 15 }) 16 .done(function() { 17 18 }) 19 .fail(function() { 20 21 }) 22 .always(function() { 23 24 }); 25} 26 27function register(roomId,roomName){ 28 var arr={ 29 visitor : document.getElementById("visitor").value, 30 checkIn : document.getElementById("checkIn").value, 31 checkOut : document.getElementById("checkOut").value, 32 roomId : roomId, 33 roomName : roomName 34 }; 35 var form = documents.register; 36 form.data.value=arr; 37 form.submit(); 38} 39function callTest(roomId,roomName){ 40 alert("called param:["+roomId+","+roomName+"]"); 41}
aタグのonclick属性で呼び出すをcallTestにしたら呼び出されました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/13 02:19
2019/05/13 02:24
2019/05/13 03:11
2019/05/13 03:14