2017-01-27 11 views
1

JavaScriptを使用して2つのドロップダウンの入力に基づいてリンクを作成しようとしています。ただし、ユーザーがいずれかのドロップダウンでデータを変更するために戻ったときに問題が発生します。スクリプトを再度実行すると、href="report_dayGU.php"の代わりにhref="report_dayGU.phpJW.php"のようなリンクになります。誰でもこの問題を解決することができれば、大変感謝しています。ドロップダウンを使用してhref属性を動的に変更する際の問題

HTML:

<div class="dropdown-spans"> 
    <label for="reportSpans">Select Report Span:</label> 
    <select id="reportSpans" name="reportSpans"> 
    <option value="#">Select</option> 
    <option value="_day">Today</option> 
    <option value="_week">This Week</option> 
    <option value="_month">This Month</option> 
    <option value="_all">All Records</option> 
    </select> 
</div> 

<br> 

<div class="dropdown-aircraft"> 
    <label for="reportAircraft">Select Aircraft:</label> 
    <select id="reportAircraft" name="reportAircraft"> 
    <option value="#">Select</option> 
    <option value="GU">GU</option> 
    <option value="JW">JW</option> 
    <option value="NO">NO</option> 
    <option value="SD">SD</option> 
    </select> 
</div> 

<br> 

<div class="button-produce"> 
    <a id="report" href="#">Produce Report</a> 
</div> 

はJavaScript:良い

var span = document.getElementById('reportSpans'); 
span.onchange = function() { 
    document.getElementById("report").href = "report" + this.value; 
} 

var ac = document.getElementById('reportAircraft'); 
ac.onchange = function() { 
    document.getElementById("report").href = document.getElementById("report").href + this.value + ".php"; 
} 

JSFiddle

+0

はこれに最後から二番目の行を交換してみてください).value + this.value + ".php"; ' – Optio

答えて

1

レポートハイパーリンクの生成を、選択ボックスの変更によって呼び出される別の関数に移動します。

例のコードは次のとおりです。 `のdocument.getElementById( "レポート")のhref = "レポート" +のdocument.getElementById( 'reportSpans':

var span = document.getElementById('reportSpans'); 
 
span.onchange = generateLink; 
 

 
var ac = document.getElementById('reportAircraft'); 
 
ac.onchange = generateLink; 
 

 
function generateLink() { 
 
\t var spanValue = document.getElementById("reportSpans").value; 
 
    var aircraftValue = document.getElementById("reportAircraft").value; 
 
    var reportLink = (spanValue != "#" && aircraftValue != "#")?("report" + spanValue + aircraftValue + ".php"):"#"; 
 

 
\t window.alert(reportLink) 
 
    document.getElementById("report").href = reportLink; 
 
}
<div class="dropdown-spans"> 
 
    <label for="reportSpans">Select Report Span:</label> 
 
    <select id="reportSpans" name="reportSpans"> 
 
    <option value="#">Select</option> 
 
    <option value="_day">Today</option> 
 
    <option value="_week">This Week</option> 
 
    <option value="_month">This Month</option> 
 
    <option value="_all">All Records</option> 
 
    </select> 
 
</div> 
 

 
<br> 
 

 
<div class="dropdown-aircraft"> 
 
    <label for="reportAircraft">Select Aircraft:</label> 
 
    <select id="reportAircraft" name="reportAircraft"> 
 
    <option value="#">Select</option> 
 
    <option value="GU">GU</option> 
 
    <option value="JW">JW</option> 
 
    <option value="NO">NO</option> 
 
    <option value="SD">SD</option> 
 
    </select> 
 
</div> 
 

 
<br> 
 

 
<div class="button-produce"> 
 
    <a id="report" href="#">Produce Report</a> 
 
</div>

+0

これは私が意図したとおりに機能します、ありがとうございます! – sinesine

1

あなたは以下のように選択値を変更するhrefのたびに構築します。

チェックデモ - Fiddle Demo

var span = document.getElementById('reportSpans'); 
span.onchange = _updateUrl; 

var ac = document.getElementById('reportAircraft'); 
ac.onchange = _updateUrl; 

function _updateUrl() { 
    var href = "report" + document.getElementById("reportSpans").value 
     + document.getElementById("reportAircraft").value 
     + ".php"; 
    document.getElementById("report").href = href; 
} 
+0

完璧に動作します、ありがとうございます。 – sinesine

+0

このソリューションは、クリックされていなくても2番目のドロップダウンから値を取得しているため、正しくないようです。このテストを行い、最初のドロップダウンをクリックし、2番目のトップダウンを選択せず​​にリンクをクリックします。私は私が新人であるときに私は投票することはできませんが、選択された回答に対して私からは-1です。 – JVM

+0

@JVM私はあなたが正しいことを知っている、私は選択された答えを変更するつもりです。その問題を強調してくれてありがとう。 – sinesine

0

それが好きで持っていないのはなぜ:完了

var span = document.getElementById('reportSpans'); 
span.onchange = function() { 
    document.getElementById("report").href = "report" + document.getElementById('reportSpans') + document.getElementById('reportAircraft').value + '.php' ; 
} 

var ac = document.getElementById('reportAircraft'); 
ac.onchange = function() { 
    document.getElementById("report").href = "report" + document.getElementById('reportSpans') + document.getElementById('reportAircraft').value + '.php' ; 
} 
0

、このjsfiddleチェック:私は、現在を表示するアラートを入れている

https://jsfiddle.net/n8b7j78m/3/ 

をhref値。

var span = document.getElementById('reportSpans'); 
var baseURL; 

span.onchange = function() { 
baseURL = "report" + this.value; 
document.getElementById("report").href = baseURL; 
} 

var ac = document.getElementById('reportAircraft'); 
ac.onchange = function() { 
document.getElementById("report").href = baseURL + this.value + ".php"; 
alert(document.getElementById("report").href); 
} 
+0

2番目のドロップダウンから値を選択する前に、hrefの以前の値を保持することになっていました。 – JVM

+0

解決策に問題があることに注意してください。最初の選択から値を選択するたびに、リンクのhrefから2番目の値の値が消去されます。https://fiddle.jshell.net/ermakovnikolayを参照してください。/453etvez/1 /。あなたが初心者であるので私はあなたの答えを下降させません。 –

+0

こんにちはNikolay、私に親切でありがとう:)。しかし、私はそれが間違っているとは思わない。私の考えは、最初のドロップダウンを選択すると、hrefにコントローラーを設定しました。これは、より広範なレポートまたはレポートリストになります。最初のドロップダウンを設定せずにレポートリンクをクリックしても、それは機能します。ここでは解決策を比較しませんが、URLを生成するために同じ関数を使用すると、最初のドロップダウンをクリックした直後に拡張子が.phpの不正な形式のURLが作成されています。 – JVM

関連する問題