如題 我有幾段程式碼如下
$.getJSON("data/songlist.json"+query,
function(g)
{
music_total=g.total_size;
song_json=g.songlist;
song_length=song_json.length;
song_html="<table class=list><tr><th width=3%></th><th width=25%>歌手</th><th width=30%>歌名</th><th width=40%>專輯</th><th width=3%>時間</th></tr>";
for(s=0;s<song_length-1;s++)
{
var charA=String(song_json[s].artist);
var charB=String(song_json[s].title.substr(0,2));
song_html+="<tr>";
song_html+="<td>"+(s+1)+"</td>";
song_html+='<td><a href="javascript:void(0)" onclick="artist_name(\''+song_json[s].artist.replace(/'/g,"\\'")+"');return false;\"> ";
song_html+=song_json[s].artist+"</a></td>";
song_html+='<td><a id="request" href="javascript:void(0)" onclick="check('+charA+","+charB+');return false;" title=>'+song_json[s].title+"</a></td>";
song_html+='<td><a href="javascript:void(0)" onclick="album_name(\''+song_json[s].album.replace(/'/g,"\\'")+'\');return false;\"> ';
song_html+=song_json[s].album+"</a></td>";
song_html+="<td>"+song_json[s].length+"</td>";
song_html+="</tr>";
}
song_html+="</table>";
$("#song_list").html(song_html);
function check(ca,ct)
{
$.getJSON("data/requestlist.json",
function(b)
{
var request_json=b.requestlist;
var request_length=request_json.length;
var n=1;
var count=0;
var oa,ot,na,nt,de,count;
for(q=0;q<request_length-1;q++)
{
oa=request_json[q].artist;
ot=request_json[q].title.substr(0,2);
count=0;
for(i=n;i<request_length-1;i++)
{
na=request_json[i].artist;
nt=request_json[i].title.substr(0,2);
if(ot==nt||ct==nt)
{
err=1;
}
else if(oa==na||ca==na)
{
count++;
if(count>=3)
{
err=1;
}
}
}
n++;
}
}
)
}
if(err!=1)
{
function request(f,b,d)
{
var e;
if(d)
{
if(d=="rem")
{
e="?cmd=remove&list_id="+f+"&song_id="+b;
}
}
else
{
e="?cmd=request&list_id="+f+"&song_id="+b;
}
$.getJSON("data/message.json"+e,
function(g)
{
if(g.max_request_num==0){
$("#message").html("點播系統已關閉,請稍後再點播");
}
else if(g.message=="Request accepted."){
$("#message").html("歌曲已點播完成");
}
else if(g.message==" This song played recently. Please wait ."){
$("#message").html("這首歌曲最近已經播過了。請耐心等待。");
}
else if(g.message==" This song not requested."){
$("#message").html("歌曲點播失敗");
}
else if(g.message==" Remove request."){
$("#message").html("已取消點播歌曲");
}
else if(g.message==" Requested song not found."){
$("#message").html("找不到要點播的歌");
}
else if(g.message==" Requests have reached max per ip."){
$("#message").html("您的點播數已超過個人能點播的最大數量。請耐心等待。");
}
else if(g.message==" This song already requested."){
$("#message").html("這首歌曲已經被點播了");
}
else if(g.message==" Requests have reached max."){
$("#message").html("點播歌單已滿。請耐心等待。");
}
else{
$("#message").html(g.message);
}
req_settimeout=setTimeout(requestlist_call(),100)
}
);
$("#message").show();
info_call();
return false;
}
}
現在我想利用check函數去觸發後面的檢查 可是一直出現undefind 想請問該如何解決這問題
問題應該是出在onclick="check('+charA+","+charB+')
,check
需要兩個參數,可是這樣子的話只會傳一個過去,因為單引號沒有成雙的關係,可以把它改成這樣子:
onclick="check('"+charA+"','"+charB+"')
如果有問題可以在下方留言告訴我,謝謝
出現Unexpected string
大大您的JavaScript
song_html+='<td><a id="request" href="javascript:void(0)" onclick="check('+charA+","+charB+');return false;" title=>'+song_json[s].title+"</a></td>";
首尾的單雙引號不同!要在檢查一下有沒有下錯的地方
改成下方這樣看看。
song_html+='<td><a id="request" href="javascript:void(0)" onclick="check("'+charA+'","'+charB+'");return false;" title=>'+song_json[s].title+"</a></td>";
Unexpected end of input 不過這次網頁有出來了 感覺應該快了
我有點亂掉了XD 等我一下下
改成這樣子吧!
song_html+='<td><a id="request" href="javascript:void(0)" onclick="check(\''+charA+'\',\''+charB+'\');return false;" title=>'+song_json[s].title+"</a></td>";
因為看得有點亂,所以直接用跳脫字元處理XD
跳脫字元是\
把單引號或雙引號放他後面的話,就會被當成一般的字元處理,加進字串中!
如果有問題可以在下方留言告訴我,不好意思看有點久XD
恩 似乎是沒錯誤了 不過後面的函式好像沒觸發到
好像是request的fbd沒傳過去
大大您可以先把check
這個函式改成下方這樣子,看有沒有觸發:
function check(strA,strB){
alert(strA + ',' + strB);
}
有觸發 啊對了我把request需要的也加進去好了
還是要直接把request寫進check裡
那應該是check
裡面的問題了,
可以用開發者模式看一下是哪一行出錯,
這樣會比較好修改。
而且我剛剛發現,大大每個td
的id
都是request
@@
不是 現在check沒問題了 只是沒有值傳去request所以無法觸發
request需要的是另兩個值:list_id song_id
改成這樣不知道傳不傳的過去
function check(ca,ct,f,b,d)
{
$.getJSON("data/requestlist.json",
function(b)
{
var request_json=b.requestlist;
var request_length=request_json.length;
var n=1;
var count=0;
var oa,ot,na,nt,de,count;
for(q=0;q<request_length-1;q++)
{
oa=request_json[q].artist;
ot=request_json[q].title.substr(0,2);
count=0;
for(i=n;i<request_length-1;i++)
{
na=request_json[i].artist;
nt=request_json[i].title.substr(0,2);
if(ot==nt||ct==nt)
{
err=1;
}
else if(oa==na||ca==na)
{
count++;
if(count>=3)
{
err=1;
}
}
else
{
request(f,b,d)
}
}
n++;
}
}
)
}
好像傳不過去
大大您說要加兩個但是參數多了三個耶!
他應該是都傳的到function
裡面,
只是onclick
那邊也要記得加入才行!
啊忘了說還有個是控制移除的
onclick現在改這樣 似乎還是沒功能
song_html+='<td><a id="request" href="javascript:void(0)" onclick="check(\''+charA+'\',\''+charB+'\','+song_json[s].list_id+","+song_json[s].song_id+');return false;" title=>'+song_json[s].title+"</a></td>";
您還是沒有加跳脫字元XD
改成下方這樣子吧!另外單引號和雙引號混用容易讓人眼花XD
song_html+='<td><a id="request" href="javascript:void(0)" onclick="check(\''+charA+'\',\''+charB+'\',\''+song_json[s].list_id+'\',\'' +song_json[s].song_id+'\');return false;" title=>'+song_json[s].title+"</a></td>";
list_id song_id是數字不用加引號 不知道是不是這個的問題
合併後值是能傳過去了 不過功能還出不來 能教教我嗎
您是想做到那些事情,然後現在卡在哪裡呢?
我是想做個檢查系統在點擊時觸發 如果違反規則就阻斷 目前程式碼如下:
function request(ca,ct,f,b,d)
{
$.getJSON("data/requestlist.json",
function(b)
{
var request_json=b.requestlist;
var request_length=request_json.length;
var oa,ot,na,nt,de,count;
for(q=0;q<request_length-1;q++)
{
oa=request_json[q].artist;
ot=request_json[q].title.substr(0,2);
count=0;
for(i=0;i<request_length-1;i++)
{
na=request_json[i].artist;
nt=request_json[i].title.substr(0,2);
if(ot==nt||ot==ct)
{
err=1;
}
else if(oa==na||oa==ca)
{
count++;
if(count>=3)
{
err=1;
}
}
}
}
}
)
if(err==1)
{
e=0;
}
else
{
e="?cmd=request&list_id="+f+"&song_id="+b;
}
if(d)
{
if(d=="rem")
{
e="?cmd=remove&list_id="+f+"&song_id="+b;
}
}
if(e!=0)
{
$.getJSON("data/message.json"+e,
function(g)
{
if(g.max_request_num==0){
$("#message").html("點播系統已關閉,請稍後再點播");
}
else if(g.message=="Request accepted."){
$("#message").html("歌曲已點播完成");
}
else if(g.message==" This song played recently. Please wait ."){
$("#message").html("這首歌曲最近已經播過了。請耐心等待。");
}
else if(g.message==" This song not requested."){
$("#message").html("歌曲點播失敗");
}
else if(g.message==" Remove request."){
$("#message").html("已取消點播歌曲");
}
else if(g.message==" Requested song not found."){
$("#message").html("找不到要點播的歌");
}
else if(g.message==" Requests have reached max per ip."){
$("#message").html("您的點播數已超過個人能點播的最大數量。請耐心等待。");
}
else if(g.message==" This song already requested."){
$("#message").html("這首歌曲已經被點播了");
}
else if(g.message==" Requests have reached max."){
$("#message").html("點播歌單已滿。請耐心等待。");
}
else{
$("#message").html(g.message);
}
req_settimeout=setTimeout(requestlist_call(),100)
}
);
}
$("#message").show();
info_call();
return false;
}
$.getJSON("data/requestlist.json",那段就是檢查系統
不過沒辦法用出我想要的功能
你有下中斷點或寫console看看程式是跑在哪邊停掉的嗎?
如果有的話我應該比較好知道問題出在哪。
好像是提早err變1的樣子 而且聽另一個有再開台的說這程式碼似乎不能用了 需要提供原始檔跟環境嗎這樣你比較好測試
會讓err變1的情況應該只有這裡,可以確認是不是有不小心跑進去了
if(ot==nt||ot==ct)
{
err=1;
}
else if(oa==na||oa==ca)
{
count++;
if(count>=3)
{
err=1;
}
}
是這裡沒錯 可是我也想不到要怎改了 昨天光是想了上面那些就已經絞盡腦汁了 還是給你原始碼跟環境讓你直接改吧
不然至少給個方向 讓我比較好改
我可以告訴你該怎麼做,
但是我無法幫你寫
目前就是先跟著程式跑,看過程是不是和想像中一樣,
可以下alert()
或是console.log()
確認變數的值!
恩 我先去用看看
先一個一個慢慢來吧 現在程式碼長這樣 目前是點了兩手同歌曲後會擋 可是我想要點了一首後就預擋第二首
$.getJSON("data/requestlist.json",
function(b)
{
var request_json=b.requestlist;
var request_length=request_json.length;
var oa,ot,na,nt,de,count;
for(q=0;q<request_length-1;q++)
{
oa=request_json[q].artist;
ot=request_json[q].title.substr(0,2);
count=0;
if(ot==ct)
{
err=1;
}
}
}
)
方便下一下註解嗎?
因為看不太出各個變數是在做什麼的
剛改了一下大致上功能是出來了
function request(ca,ct,f,b,d)
{
$.getJSON("data/requestlist.json",
function(b)
{
var request_json=b.requestlist;
var request_length=request_json.length;
var oa,ot,na,nt,de,count;
for(q=0;q<request_length-1;q++)
{
oa=request_json[q].artist;
ot=request_json[q].title.substr(0,2);
count=0;
if(ot==ct)
{
err=1;
alert("Fail!");
return false
}
else
{
pass=true;
}
count=0;
for(i=0;i<request_length-1;i++)
{
na=request_json[i].artist;
nt=request_json[i].title.substr(0,2);
if(oa==na)
{
count++;
if(count>=2)
{
if(oa==ca&&count>=3)
{
err=1;
alert("Fail!");
return false
}
else
{
pass=true;
}
}
}
}
}
}
)
if(err==1)
{
e=0;
}
else if(pass)
{
e="?cmd=request&list_id="+f+"&song_id="+b;
}
if(d)
{
if(d=="rem")
{
e="?cmd=remove&list_id="+f+"&song_id="+b;
}
}
if(e!=0)
{
$.getJSON("data/message.json"+e,
function(g)
{
if(g.max_request_num==0){
$("#message").html("The request system is closed, Please try again later.");
}
else{
$("#message").html(g.message);
}
req_settimeout=setTimeout(requestlist_call(),100)
}
);
}
$("#message").show();
info_call();
return false;
}
不過有個有個問題 就是第一次點播一定要點兩下才有反應
恭喜你啊!
不過我還是看不太懂程式碼XD