JavaScriptの変数$urlのif構文による分岐方法

このQ&Aのポイント
  • JavaScriptで変数$urlをif構文で分岐させる方法を教えてください。$urlがxxxの場合は<span class="abc">$content</span>とし、それ以外の場合は<a href="$url" target="$target">$content</a>とします。
  • JavaScriptの変数$urlをif構文で分岐させる方法を教えてください。$urlがxxxの場合は<span class="abc">$content</span>とし、それ以外の場合は<a href="$url" target="$target">$content</a>とします。
  • JavaScriptで変数$urlをif構文で分岐させる方法を教えてください。$urlがxxxの場合は<span class="abc">$content</span>とし、それ以外の場合は<a href="$url" target="$target">$content</a>とします。
回答を見る
  • ベストアンサー

JavaScriptの記述を教えて下さい。

はじめまして、charliehamaといいます。 素人なもので、JavaScriptに詳しい方、教えて下さい。 次のコード(全体の中の一部)があります。 <!-- // ------------------------------------------------- // HTML生成関数 // ------------------------------------------------- function disp(){ //各要素を変数に格納 var $day = $(this).find('day').text(); var $label = $(this).find('label').text(); var $category = $(this).find('category').text(); var $content = $(this).find('content').text(); var $url = $(this).find('url').text(); var $target = $(this).find('target').text(); //HTMLを生成 $('<tr>'+ '<th>'+$day+'</th>'+ '<td class="label"><span class="'+$label+'">'+$category+'</span></td>'+ '<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>'+ '</tr>').appendTo('table.tbl tbody'); } --> 変数$urlについて、if構文で分岐させるにはどのように記述すればよいですか? (1) $urlがxxxの時、<td><span class="abc">'+$content+'</span></td> とする。 (2) $urlがそれ以外の時、<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>とする。 (3) (1)と(2)以外の処理は変更しない。 質問の仕方が悪ければご指摘下さい。 困っています。 どうかよろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

「HTMLを生成」で結合する前に、 $urlによる分岐処理を行って、 そこで生成した変数を結合する部分で使うのはいかがでしょうか・・・? ---------------------------------------------------- // $urlの値によって変わる変数の設定 var h = '<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>' if( $url == 'xxx' ) { h = '<td><span class="abc">'+$content+'</span></td>'; } //HTMLを生成 $('<tr>'+ '<th>'+$day+'</th>'+ '<td class="label"><span class="'+$label+'">'+$category+'</span></td>'+ h + '</tr>').appendTo('table.tbl tbody'); } ---------------------------------------------------- hという変数を使ってあらかじめ文字列を設定しておき、 hを結合するときに使うという流れで書いてみました。 ご参考になれば幸いです!

charliehama
質問者

お礼

blue-goheimochiさん ありがとうございます!! やりたいことが完璧に実現できました。 おまけにJavaScriptの面白さの一端を感じることができました。 なかなか時間がないですが、自分で書けるように少しづつでも勉強していこうかなという気になりました。 またの機会がございましたらよろしくお願いいたします。

関連するQ&A

  • javascriptを使用したメール送信の処理方法

    本を参考に独学で問合せフォームを作成しています。(初心者です) 未入力項目が0の時は送信ボタンを押すと(phpに)送信できるようにしたいのですが、javascriptにどのようなコードを入れればよいのでしょうか。 下記は本に記載されているコードなのですが、下記だけだと送信することが出来ません。 ご教示お願いします。 【js】の下記の部分にコードを入れればいいのかと思うのですが、どういうコードをどのように入れればいいのかわかりません。 //エラーカウントが0であれば、エラー無し if( errorCount == 0 ){ alert( '送信内容にエラーはありません。' ); }; また、下記のHTMLの最初の行の<form id="myForm" method="post" >にaction="info.php"を入れてみましたが、info.phpに飛ばないのですがどうしてなのでしょうか? 【HTML】 <form id="myForm" method="post" > <table> <tr> <th><label for="formName">名前 <span class="ind">必須</span></label></th> <td><input type="text" name="formName" id="formName"></td> </tr> <tr> <th><label for="formFurigana">ふりがな <span class="ind">必須</span></label></th> <td><input type="text" name="formFurigana" id="formFurigana"></td> </tr> <tr> <th><label for="formTell">電話番号 <span class="ind">必須</span></label></th> <td><input type="text" name="formTell" id="formTell"></td> </tr> <tr> <th><label for="formMail">メールアドレス <span class="ind">必須</span></label></th> <td><input type="text" name="formMail" id="formMail"></td> </tr> <tr> <th><label for="formInquiry">お問い合わせ内容 <span class="ind">必須</span></label></th> <td><textarea rows="9" name="formInquiry" id="formInquiry"></textarea></td> </tr> </table> <p><input type="submit" value="送信内容を確認する"></p> </form> </div> 【jsのコード】 $(function(){ function setMyForm(target){ var ERROR_MESSAGE_CLASSNAME = 'errorMsg'; //エラー時のメッセージ要素のclass名 var ERROR_INPUT_CLASSNAME = 'errorInput'; //エラー時のinput要素のclass名 var items = []; //チェック対象となるテキスト入力要素を格納した配列 //項目チェックする var checkAll = function(){ var errorCount = 0; //項目:名前のチェック checkEmptyText( items[0], '名前をご入力ください。' ); //項目:ふりがなのチェック checkEmptyText( items[1], 'ふりがなをご入力ください。' ); //項目:電話番号のチェック checkEmptyText( items[2], '電話番号をご入力ください。' ); //項目:メールアドレスのチェック checkEmptyText( items[3], 'メールアドレスをご入力ください。' ); //項目:お問い合わせ内容のチェック checkEmptyText( items[4], 'お問い合わせ内容をご入力ください。' ); //input,textareaのチェック for( var i=0; i<items.length; i++ ){ if( items[i].prop('isSuccess') == false ){ errorCount++; }; }; //エラーカウントが0であれば、エラー無し if( errorCount == 0 ){ alert( '送信内容にエラーはありません。' ); }; }; //エラーメッセージの追加 var addErrorMessage = function(selector, msg){ removeErrorMessage(selector); selector.before('<span class="'+ERROR_MESSAGE_CLASSNAME+'">'+msg+'</span>'); selector.addClass(ERROR_INPUT_CLASSNAME); }; //エラーメッセージの削除 var removeErrorMessage = function(selector){ var msgSelector = selector.parent().find('.'+ERROR_MESSAGE_CLASSNAME); if( msgSelector.length != 0 ){ msgSelector.remove(); selector.removeClass(ERROR_INPUT_CLASSNAME); }; }; //input,textareaの未入力チェック var checkEmptyText = function(selector, msg){ if( selector.val() == '' ){ addErrorMessage(selector, msg); selector.prop('isSuccess', false); }else{ removeErrorMessage(selector); selector.prop('isSuccess', true); }; }; //初期設定 var init = function(){ //submitイベントの設定 target.on({ 'submit': function(){ checkAll(); return false; } }); //input要素を配列に格納 items = [ target.find('input[name=formName]'), target.find('input[name=formFurigana]'), target.find('input[name=formTell]'), target.find('input[name=formMail]'), target.find('textarea[name=formInquiry]') ]; //input要素のプロパティを設定 $.each(items, function(index){ items[index].prop('isSuccess', false); }); //enterキーでsubmitしてしまうのを防止する target.find('input[type=text]').on({ 'keypress': function(e){ if( (e.keyCode == 13) ) return false; } }); }; init(); }; setMyForm($('#myForm')); });

  • CGIPerlクリックした値を次の頁に表示させたい

    下記の様にカレンダーの表をHTMLで作成しました。 それぞれの日付のリンク(○や△)をクリックした時に、 次のページで、クリックした日付を表示させるには、 どのようにすれば良いのでしょうか。 1ページ目 HTMLで作成したカレンダーに、日付と、 それぞれ空き状況○、△、×等を表示。 ○と△はクリック可能。×はクリックできない。 (イメージ)  ―――――― |1 | 2| 3| |○|△|○|  ―――――― 2ページ目構想 日付【1ページ目で○か△をクリックした日付をここに表示したい】 お名前【入力欄】←このページで入力する ご住所【入力欄】←このページで入力する また、この2ページ目の内容は、 sendmailを使用してメール送信する予定でいます。 お名前やご住所の部分をsendmailで送信する事はできるのですが、 その際に、日付の部分も送信できればと考えています。 この点も併せてご教授いただければ幸いに存じます。 以下1ページ目のhtml <html> <body> <table border="1" cellspacing="0"> <tr> <th class="week sun">日</th> <th class="week">月</th> <th class="week">火</th> <th class="week">水</th> <th class="week">木</th> <th class="week">金</th> <th class="week sat">土</th> </tr> <tr> <td class="day">&nbsp;</td> <td class="day">&nbsp;</td> <td class="day">&nbsp;</td> <td class="day">&nbsp;</td> <td class="day before"><span style="color:#000000">1</span><p> <a href="nextpageaddress">○<br>\5,980</a></a></p></td> <td class="day before"><span style="color:#000000">2</span><p> <a href="nextpageaddress">△<br>\5,980</a></a></p></td> <td class="day before"><span style="color:#0000ff">3</span><p> <a href="nextpageaddress">○<br>\5,980</a></a></p></td> </tr> </table> </body> </html> 2ページ目の構想 <html> <table> <tr>     <th>予約日付</th> <td>ここに前ページでクリックした日付を表示させたい</td> </tr><tr> <th>お名前<font color="#ff0000">(必須)</font></th> <td><input type="text" name="お名前" size="35" /></td> </tr><tr> <th>ご住所<font color="#ff0000">(必須)</font></th> <td><input type="text" name="ご住所" size="70" /></td> </tr> </table> </html>

    • ベストアンサー
    • CGI
  • Javascript onsubmit記述方法

    サイト制作をしているのですが、行き詰った箇所を教えてください。 form内でEnterキーを押したときに送信ページに飛んでしまわずに、次項目へ行くように(Tabの役割)するJavascriptと、確認用メールアドレスの項目を作るためのJavascriptを併用したいのですが、 onsubmitに"return CheckForm(this);"と"javascript:pageTracker._linkByPost(this)"を並列させる必要があるようなのですが、書き方を教えてください。 もし、そもそもの記述が間違っていたらご指摘ください。 ---- Javascript部分 <script type="text/javascript"> /*********************************************** * Disable "Enter" key in Form script- * By Nurul Fadilah(nurul@REMOVETHISvolmedia.com) ***********************************************/ function handleEnter (field, event) { var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; if (keyCode == 13) { var i; for (i = 0; i < field.form.elements.length; i++) if (field == field.form.elements[i]) break; i = (i + 1) % field.form.elements.length; field.form.elements[i].focus(); return false; } else return true; } </script> <script language="JavaScript" type="text/javascript"> function CheckForm(theform) { var FormOK = false; if (theform.mailaddress.value == "") { FieldControl(theform.To, "「メールアドレス」を入力してください。"); }else if (theform.mailaddresscheck.value != theform.email1.value ) { FieldControl(theform.To, "「メールアドレス(確認用)」を入力してください。"); }else if (theform.mailaddresscheck.value != theform.email1.value ) { FieldControl(theform.To, "入力されたものが一致するように入力してください。"); }else { FormOK = true; } return FormOK; } function FieldControl(element, message) { alert(message); } </script> ------- HTML部分(現状"Enter" key in Formのみ実装) <form action="" method="post" onSubmit="javascript:pageTracker._linkByPost(this)"> <table class="contact"> <tr> <th>メールアドレス <span class="red">※</span></th> <td><input type="text" name="mailaddress" id="textfield" class="type01" onkeypress="return handleEnter(this, event)" /></td> </tr> <tr> <th>メールアドレス確認用 <span class="red">※</span></th> <td><input type="text" name="mailaddresscheck" id="textfield" class="type01" onkeypress="return handleEnter(this, event)" /></td> </tr>

  • javascriptカウントダウン終了後別ページへ

    javascriptでカウントダウン終了後に別ページに飛ばすリンクを表示したいのですが、どのようにすれば教えていただけますでしょうか? 下記スクリプトではカウントダウン終了時に「終了しました」と表示されます。 その「終了しました」にリンクを貼りたいです。 <script language="JavaScript" type="text/javascript"> function CountdownTimer(elm,tl,mes){ this.initialize.apply(this,arguments); } CountdownTimer.prototype={ initialize:function(elm,tl,mes) { this.elem = document.getElementById(elm); this.tl = tl; this.mes = mes; },countDown:function(){ var timer=''; var today=new Date(); var day=Math.floor((this.tl-today)/(24*60*60*1000)); var hour=Math.floor(((this.tl-today)%(24*60*60*1000))/(60*60*1000)); var min=Math.floor(((this.tl-today)%(24*60*60*1000))/(60*1000))%60; var sec=Math.floor(((this.tl-today)%(24*60*60*1000))/1000)%60%60; var milli=Math.floor(((this.tl-today)%(24*60*60*1000))/10)%100; var me=this; if( ( this.tl - today ) > 0 ){ if (day) timer += '<span class="day">'+day+':</span>'; if (hour) timer += '<span class="hour">'+hour+':</span>'; timer += '<span class="min">'+this.addZero(min)+':</span><span class="sec">'+this.addZero(sec)+':</span><span class="milli">'+this.addZero(milli)+'</span>'; this.elem.innerHTML = timer; tid = setTimeout( function(){me.countDown();},10 ); }else{ this.elem.innerHTML = this.mes; return; } },addZero:function(num){ return ('0'+num).slice(-2); } } function CDT(){ var tl = new Date('2013/2/1 00:00:00'); var timer = new CountdownTimer('CDT',tl,'終了しました'); timer.countDown(); } window.onload=function(){ CDT(); } </script>

  • javascriptについて

    現在会社のHPのお問い合わせフォームを作っています。 フォーム画面で確認ボタンを押すと、確認画面を表示させたく、 http://blog.material-being.com/portfolio/auto_confirm/ こちらのページのjavascriptをつかって、作ってみたのですが、 書かれているソースで分からないところがあります。 switch ($(this).attr('type')) { //--------------------------------- // hidden, button, submit:何もしない //--------------------------------- case 'hidden': case 'button': case 'submit': break; //--------------------------------- // checkbox, radio:選択されたラベルの値を取得 //--------------------------------- case 'checkbox': case 'radio': var checkOrRadioName = $(this).attr('name'); //同じName属性の要素を既に処理していなければ if(checkOrRadioNames.indexOf($(this).attr('name')) == -1) { checkOrRadioNames += checkOrRadioName + ','; // x+= y → x = x + y var checks = ''; $(formClass + ' [name="'+checkOrRadioName+'"]:checked').each(function() { //チェックボックスのチェック要素の選択。 if(getLabelCR) { //ラベルの値を取得する場合 var checkOrRadioVal = $('label[for="'+$(this).attr('id')+'"]').html(); }else{ //Valueの値を取得する場合 var checkOrRadioVal = $(this).val(); } if(checks == '') { checks += checkOrRadioVal; }else{ checks += ',' + checkOrRadioVal; } }); $(formClass + ' [name="'+checkOrRadioName+'"]:last').after('<span class="autoConfirmVal">'+ checks +'</span>'); } $('label[for="'+$(this).attr('id')+'"]').css('display', 'none'); break; //--------------------------------- // password:入力文字を"*"記号に置き換える //--------------------------------- case 'password': $(this).after('<span class="autoConfirmVal">'+ $(this).val().replace(/./g, '*') +'</span>'); break; default : $(this).after('<span class="autoConfirmVal">'+ $(this).val() +'</span>'); } このradio部分がよくわかりません。 (1) var checkOrRadioName = $(this).attr('name'); if(checkOrRadioNames.indexOf($(this).attr('name')) == -1) { これは、同じものを検索しているのように見えるのですが、、-1になるのでしょうか? (2) $(formClass + ' [name="'+checkOrRadioName+'"]:checked').each(function() { var checkOrRadioVal = $('label[for="'+$(this).attr('id')+'"]').html(); 上記の大括弧は何を意味するのでしょうか? forとはなんでしょうか。 (3) .eachは繰り返しなのでしょうか? 以上、よろしくお願いいたします。

  • 【緊急】リアルタイムでエラーチェック

    下記のコードを使って、リアルタイムでエラーチェックを行うファームを作りたいと考えています。 このコードだとsubmitしてからでないとコードチェックが行われないので、最初の入力時から行うようにしたいのですが、何か手立てはないでしょうか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>exValidationサンプル 2</title> <link type="text/css" rel="stylesheet" href="css/style.css" /> <link type="text/css" rel="stylesheet" href="skin/selectable/style.css" /> <link type="text/css" rel="stylesheet" href="css/exvalidation.css" /> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.easing.js"></script> <script type="text/javascript" src="js/exvalidation.js"></script> <script type="text/javascript" src="js/exchecker-ja.js"></script> <script type="text/javascript"> $(function(){ $("form") .exValidation({ rules: { name: "required", kana: "required katakana", email: "required email hankaku group", pass: "required min6 max12", repass: "required retype-pass", radio: "radio", checkbox: "checkbox" }, errInsertPos: 'after', errPosition: 'fixed' }); }); </script> </head> <body> <div class="pagebody"> <h1>exValidation</h1> <form> <fieldset> <p class="attention">*は必須項目です</p> <table> <tbody> <tr> <th>Name<span>*</span></th> <td><input type="text" id="name" name="name" value="" /></td> </tr> <tr> <th>Kana<span>*</span></th> <td><input type="text" id="kana" name="kana" value="" /></td> </tr> <tr> <th>Mail<span>*</span></th> <td><span id="email"><input type="text" id="email" name="email" value="" /> @ <input type="text" name="email2" value="" /></span></td> </tr> <tr> <th>Password<span>*</span></th> <td><input type="password" id="pass" name="pass" value="" /></td> </tr> <tr> <th>Retype-Password<span>*</span></th> <td><input type="password" id="repass" name="repass" value="" /></td> </tr> <tr> <th>Sex<span>*</span></th> <td> <span id="radio"> <label for="male"><input type="radio" id="male" name="sex" value="male" />male</label> <label for="female"><input type="radio" id="female" name="sex" value="female" />female</label> </span> </td> </tr> <tr> <th>Prefecture<span>*</span><br /> this is selectable</th> <td> <select id="pref" name="pref" class="selectable"> <optgroup label="---"> <option value="">---</option> </optgroup> <optgroup label="北海道"> <option value="01">北海道</option> </optgroup> <optgroup label="東北"> </optgroup> </select> </td> </tr> <tr> <th>City</th> <td><input type="text" name="city" value="" /></td> </tr> <tr> <th>Street</th> <td><input type="text" name="street" value="" /></td> </tr> <tr> <th>Favorite<span>*</span></th> <td> <span id="checkbox"> <label for="f1"><input type="checkbox" id="f1" name="fav" value="f1">books</label> <label for="f2"><input type="checkbox" id="f2" name="fav" value="f2">music</label> <label for="f3"><input type="checkbox" id="f3" name="fav" value="f3">game</label> <label for="f4"><input type="checkbox" id="f4" name="fav" value="f4">study</label> <label for="f5"><input type="checkbox" id="f5" name="fav" value="f5">fishing</label> </span> </td> </tr> </tbody> </table> </fieldset> <p class="submit"><input type="submit" value="Submit" class="button" /></p> </form> </div> </body> </html>

  • JavaScriptのtable保存について

    先日時間割り表を作り以下のコードを書きました これをアプリにして自分のスマホに入れたのですがAndroidのためcookieが対応していません そこでlocalStorageを使えば可能ということを聞きました <body background="img/st18.png"> <center> <font style="font-size:30pt;"> <font color="#4795F4"><b><i>Monday</i></b></font> </font> <br><br> <a href="sat.html"><img src="img/blsat.gif" width="50" height="25"></a> <a href="index.html"><img src="img/blhome.gif" width="50" height="25"></a> <a href="tue.html"><img src="img/bltue.gif" width="50" height="25"></a> <form> <br> <table border="3" bordercolor="#4795F4" align="center" bgcolor="#DDFFFA"> <tr align="center"><th>時間</th><th>科目</th><th>教室</th><th>備考</th></tr> <tr align="center"><td width="20" height="80">1</td><td width="70"><span id="sbj1"></span></td> <td width="60"><span id="crm1"></span></td><td width="100"><span id="com1"></span></td> <tr align="center"><td width="20" height="80">2</td><td width="70"><span id="sbj2"></span></td> <td width="60"><span id="crm2"></span></td><td width="100"><span id="com2"></span></td> <tr align="center"><td width="20" height="80">3</td><td width="70"><span id="sbj3"></span></td> <td width="60"><span id="crm3"></span></td><td width="100"><span id="com3"></span></td> <tr align="center"><td width="20" height="80">4</td><td width="70"><span id="sbj4"></span></td> <td width="60"><span id="crm4"></span></td><td width="100"><span id="com4"></span></td> <tr align="center"><td width="20" height="80">5</td><td width="70"><span id="sbj5"></span></td> <td width="60"><span id="crm5"></span></td><td width="100"><span id="com5"></span></td> <span id="testarea"></span> </form> </body> <script> <!-- monaca.viewport({width: 320}); function setCookie(c_name,value,expiredays){ // pathの指定 変数名 var path = location.pathname; // pathをフォルダ毎に指定する場合のIE対策 var paths = new Array(); paths = path.split("/"); if(paths[paths.length-1] != ""){ paths[paths.length-1] = ""; path = paths.join("/"); } // 有効期限の日付 これがないと編集できない var extime = new Date().getTime(); var cltime = new Date(extime + (60*60*24*1000*expiredays)); var exdate = cltime.toUTCString(); // クッキーに保存する文字列を生成 これがないと保存できない var s=""; s += c_name +"="+ escape(value);// 値はエンコードしておく s += "; path="+ path; if(expiredays){ s += "; expires=" +exdate+"; "; }else{ s += "; "; } // クッキーに保存 document.cookie=s; } function getCookie(c_name){ var st=""; var ed=""; if(document.cookie.length>0){ // クッキーの値を取り出す st=document.cookie.indexOf(c_name + "="); if(st!=-1){ st=st+c_name.length+1; ed=document.cookie.indexOf(";",st); if(ed==-1) ed=document.cookie.length; // 値をデコードして返す return unescape(document.cookie.substring(st,ed)); } } return ""; } //変数設定 if(getCookie('mon_sects1')){var sect1 = getCookie('mon_sects1');}else{var sect1 = "科目1,教室,備考";} if(getCookie('mon_sects2')){var sect2 = getCookie('mon_sects2');}else{var sect2 = "科目2,教室,備考";} if(getCookie('mon_sects3')){var sect3 = getCookie('mon_sects3');}else{var sect3 = "科目3,教室,備考";} if(getCookie('mon_sects4')){var sect4 = getCookie('mon_sects4');}else{var sect4 = "科目4,教室,備考";} if(getCookie('mon_sects5')){var sect5 = getCookie('mon_sects5');}else{var sect5 = "科目5,教室,備考";} var sects = new Array(sect1,sect2,sect3,sect4,sect5); //時間割編集ここから function editj(a){ var secname = new Array('mon_sects1','mon_sects2','mon_sects3','mon_sects4','mon_sects5'); editsec = window.prompt("「科目,教室,備考」の順に入力してください", sects[a]); if(editsec){ secookie = secname[a]; setCookie(secookie,editsec,365); location.reload(); } } //時間割編集ここまで //時間割表示 for (i = 0; i < 5; i = i + 1){ j = i + 1; wari = sects[i].split( "," ); var subj = "sbj" + j; var clrm = "crm" + j; var comt = "com" + j; if(wari[0]){ document.getElementById(subj).innerHTML = wari[0]; } if(wari[1]){ document.getElementById(clrm).innerHTML = wari[1]; } document.getElementById(comt).innerHTML = wari[2] + "<br><img src='img/bledit.gif' width='50' height='20' onClick='editj(" + i + ")'>"; } これをlocalStorageで保存するにはどうすればできますか? もしもcookieを使ってもAndroidで保存できる方法があれば教えてください

  • JavaScriptでの時間割り作成について

    <form> <br> <table border="3" bordercolor="#994C00" align="center" bgcolor="#FFDFAA"> <tr align="center"><th>時間</th><th>科目</th><th>教室</th><th>備考</th></tr> <tr align="center"><td width="20" height="80">1</td><td width="70"><span id="sbj1"></span></td> <td width="60"><span id="crm1"></span></td><td width="100"><span id="com1"></span></td> <tr align="center"><td width="20" height="80">2</td><td width="70"><span id="sbj2"></span></td> <td width="60"><span id="crm2"></span></td><td width="100"><span id="com2"></span></td> <tr align="center"><td width="20" height="80">3</td><td width="70"><span id="sbj3"></span></td> <td width="60"><span id="crm3"></span></td><td width="100"><span id="com3"></span></td> <tr align="center"><td width="20" height="80">4</td><td width="70"><span id="sbj4"></span></td> <td width="60"><span id="crm4"></span></td><td width="100"><span id="com4"></span></td> <tr align="center"><td width="20" height="80">5</td><td width="70"><span id="sbj5"></span></td> <td width="60"><span id="crm5"></span></td><td width="100"><span id="com5"></span></td> <span id="testarea"></span> </form> </body> <script> <!-- // Set virtual screen width size to 320 pixels // 下の一行は使う時に外す。エラーが出たら消す。 monaca.viewport({width: 320}); function setCookie(c_name,value,expiredays){ // pathの指定 変数名 var path = location.pathname; // pathをフォルダ毎に指定する場合のIE対策 var paths = new Array(); paths = path.split("/"); if(paths[paths.length-1] != ""){ paths[paths.length-1] = ""; path = paths.join("/"); } // 有効期限の日付 これがないと編集できない var extime = new Date().getTime(); var cltime = new Date(extime + (60*60*24*1000*expiredays)); var exdate = cltime.toUTCString(); // クッキーに保存する文字列を生成 これがないと保存できない var s=""; s += c_name +"="+ escape(value);// 値はエンコードしておく s += "; path="+ path; if(expiredays){ s += "; expires=" +exdate+"; "; }else{ s += "; "; } // クッキーに保存 document.cookie=s; } function getCookie(c_name){ var st=""; var ed=""; if(document.cookie.length>0){ // クッキーの値を取り出す st=document.cookie.indexOf(c_name + "="); if(st!=-1){ st=st+c_name.length+1; ed=document.cookie.indexOf(";",st); if(ed==-1) ed=document.cookie.length; // 値をデコードして返す return unescape(document.cookie.substring(st,ed)); } } return ""; } //変数設定 if(getCookie('sects1')){var sect1 = getCookie('sects1');}else{var sect1 = "科目1,教室,備考";} if(getCookie('sects2')){var sect2 = getCookie('sects2');}else{var sect2 = "科目2,教室,備考";} if(getCookie('sects3')){var sect3 = getCookie('sects3');}else{var sect3 = "科目3,教室,備考";} if(getCookie('sects4')){var sect4 = getCookie('sects4');}else{var sect4 = "科目4,教室,備考";} if(getCookie('sects5')){var sect5 = getCookie('sects5');}else{var sect5 = "科目5,教室,備考";} var sects = new Array(sect1,sect2,sect3,sect4,sect5); //時間割編集ここから function editj(a){ var secname = new Array('sects1','sects2','sects3','sects4','sects5'); editsec = window.prompt("「科目,教室,備考」の順に入力してください", sects[a]); if(editsec){ secookie = secname[a]; setCookie(secookie,editsec,365); window.alert("完了しました!"); location.reload(); } } //時間割編集ここまで //時間割表示 for (i = 0; i < 5; i = i + 1){ j = i + 1; wari = sects[i].split( "," ); var subj = "sbj" + j; var clrm = "crm" + j; var comt = "com" + j; if(wari[0]){ document.getElementById(subj).innerHTML = wari[0]; } if(wari[1]){ document.getElementById(clrm).innerHTML = wari[1]; } document.getElementById(comt).innerHTML = wari[2] + "<br><input type=button value='編集' onClick='editj(" + i + ")'>"; } //時間割表示ここまで --> </script> というコードです これは月曜日のシートで火曜日、水曜日・・・と土曜日まであります このコードで月曜日の時間割を変更すると火曜日、水曜日などすべてのシートが変更されてしまいます シートごとに保存する方法ってありますか? JavaScriptを始めたばかりなのでわかりやすく教えてほしいです><

  • 簡潔なJavaScriptで実現したい

    次のような、btnToggleというクラス名のdivタグがいくつかあるHTMLで、 それぞれクリックするとそれぞれの「開く/閉じる」が反転するという動きをさせたいです。 <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>AAA</div> </div> <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>BBB</div> </div> <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>CCC</div> </div>    : <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>XXX</div> </div> 下記のようなJavaScriptで実行してみたのですが、 いくつかのdivタグをそれぞれクリックすると、flgの値と現在の状態が入れ替わってしまいます。 クラス名が同じで、flgも一つの変数なので当たり前なのですが… <script type="text/javascript"> $(document).ready(function(){ var flg = "close"; $(".btnToggle").click(function(){ if(flg == "close"){ $(this).html("<span>-</span>閉じる"); flg = "open"; }else{ $(this).html("<span>+</span>開く"); flg = "close"; } }); }); </script> 私が考えられることは、classではなく、idで「btnToggle1」「btnToggle2」「btnToggle3」…などと定義し、 JavaScriptのプログラムを次のように書くしか思いつかないのですが、 これでは、我ながら間抜けなプログラムだなと思いました。 <script type="text/javascript"> $(document).ready(function(){ var flg1 = "close"; $(".btnToggle1").click(function(){ if(flg1 == "close"){ $(this).html("<span>-</span>閉じる"); flg1 = "open"; }else{ $(this).html("<span>+</span>開く"); flg1 = "close"; } }); var flg2 = "close"; $(".btnToggle2").click(function(){ if(flg2 == "close"){ $(this).html("<span>-</span>閉じる"); flg2 = "open"; }else{ $(this).html("<span>+</span>開く"); flg2 = "close"; } }); var flg3 = "close"; $(".btnToggle3").click(function(){ if(flg3 == "close"){ $(this).html("<span>-</span>閉じる"); flg3 = "open"; }else{ $(this).html("<span>+</span>開く"); flg3 = "close"; } });        :        : }); </script> 配列などを使えばもっと簡潔になるのでしょうか。 どうか教えてくださいますようお願い申し上げます。

  • このjsを複数設定したい

    下記のjsを同ページ内に複数設定したいのですが、 どこかがバッティングしているようで、最後の記述文しか機能しません。 どうすれば、うまく両方とも機能するでしょうか? (function( $ ) { $.fn.basicTabs = function(options){ var settings = $.extend({ active_class1: "current1", list_class1: "tabs1", content_class1: "tab_content1", starting_tab1: 1 }, options ); var $content = $('.' + settings.content_class1); var $list = $('.' + settings.list_class1); $content.find('div').hide(); $content.find("div:nth-child(" + settings.starting_tab1 + ")").show(); $list.find("li:nth-child(" + settings.starting_tab1 + ")").addClass(settings.active_class1); $("." + settings.list_class1 + ' li a').click(function(e){ $list.find("li").removeClass(settings.active_class1); $("." + settings.content_class1 + " > div").hide(); $(this).parent().addClass(settings.active_class1); var currentTab1 = $(this).attr('href'); $(currentTab1).show(); e.preventDefault(); }); }; }( jQuery )); (function( $ ) { $.fn.basicTabs = function(options){ var settings = $.extend({ active_class2: "current2", list_class2: "tabs2", content_class2: "tab_content2", starting_tab2: 1 }, options ); var $content = $('.' + settings.content_class2); var $list = $('.' + settings.list_class2); $content.find('div').hide(); $content.find("div:nth-child(" + settings.starting_tab2 + ")").show(); $list.find("li:nth-child(" + settings.starting_tab2 + ")").addClass(settings.active_class2); $("." + settings.list_class2 + ' li a').click(function(e){ $list.find("li").removeClass(settings.active_class2); $("." + settings.content_class2 + " > div").hide(); $(this).parent().addClass(settings.active_class2); var currentTab2 = $(this).attr('href'); $(currentTab2).show(); e.preventDefault(); }); }; }( jQuery )); 上記のようにそれぞれ別に同ページ内で機能させたいです。 よろしくお願いします。

専門家に質問してみよう