2017-08-28 8 views
1

私はこのようになりますCSHTMLを持っている:どのようにアコーディオンの内側に呼ばれる部分的なビューにJavaScriptを適用するには?

<script> 
    $(function() { 
     $("#accordion").accordion(); 

    }); 

</script> 
<div id="accordion"> 
    <h3 id="report1">Report1</h3> 
    <div> 

     @Html.Partial("~/Views/Settings/SControl.cshtml") 


    </div> 
    <h3 id="report2">Report2</h3> 
    <div> 

     @Html.Partial("~/Views/Settings/SControl.cshtml") 

    </div> 
</div> 

私SControl.cshtmlは、以下のようになります。 私は似たタグが継続されているこのCSHTMLで外部のJavaScriptファイル

<script src="~/Scripts/App/pages/SControl.js" type="text/javascript"></script> 

<table> 
    <tr> 
     <th></th> 
     <th></th> 
    </tr> 
    <tr> 
     <td style="left:0.01em;"> 
      <span style="font-weight:bold;font-size:x-small;">Run Mode</span><div> 
       <select id="Mode" onchange="SubmitMode(this)"> 
        <option selected="selected" value="1">Run Continuosly</option> 
        <option value="2">Run on Schedule</option> 
       </select> 
       <br /> 

      </div> 
     </td> 
     <td> 
      <span style="font-weight:bold;font-size:x-small;">Reccurence:</span><div> 
       <select id="Recurrance" onchange="ChangeRecurrance(this)"> 
        <option selected="selected" value="1">On Time Job</option> 
        <option value="2">Reccurring Job</option> 
       </select> 
       <br /> 

      </div> 
     </td> 
</table> 

が含まれていますcshtmlページ。しかし、スクリプトはアコーディオンの最初のヘッダーにのみ適用されます。すべてのアコーディオンヘッダーで同じ部分ビューが呼び出され、これらの部分ビューすべてで同じjavascriptファイルが呼び出されますが、最初のヘッダーのみがスクリプトを取得します。この問題に対処する方法。

$(function() { 

    document.getElementById("Recurrance").disabled = true; 
    document.getElementById("starttime").disabled = true; 
    document.getElementById("endtime").disabled = true; 
    document.getElementById("divnoenddate").disabled = true; 
    $('#noenddate').prop('disabled', true); 
    document.getElementById("RecurEvery").disabled = true; 

    $(".date-picker").datetimepicker({ 
     changeMonth: true, 
     changeYear: true, 
     yearRange: "-100:+0", 
     dateFormat: 'dd-M-yy', 
     controlType: 'select', 
     timeFormat: 'hh:mm tt', 
     showTime: false, 
     showMinute: false, 
     showMillisec: false, 
     showMicrosec: false, 
     showTimezone: false 
    }); 
}); 
function ChangeCheckBox() { 
    if (document.getElementById("Mode").value != 1) { 
     debugger; 
     if (document.getElementById('noenddate').checked == true) { 
      document.getElementById("endtime").disabled = true; 
     } 
     else { 
      document.getElementById("endtime").disabled = false; 
      document.getElementById("endtime").value = ""; 
     } 
    } 
} 
+1

あなたが意図的に複数回のファイルと同じJavaScriptを含めるようにしようとしている場合を除き、あなただけのスクリプトタグを持っている必要があります:私はjsの外部コードが間違っていると、画像の下のようなエラーがあると思います partial view

親ビューの 'SControl.js'では、部分集合ではなく、 –

+1

2つの同一部分(両方とも 'SControl.cshtml')が意味をなさないこと、そしてあなたのスクリプトがうまくいかないことを意味する重複した' id'属性(無効なhtml)を持っていることを意味します。 –

+0

@StephenMueckeアコーディオンの部分図と同じ。このようにしないとどうすればいいですか? –

答えて

0

私はscript負荷Partial view前のページに適用すると思う:次のように外部JSファイルがある私に

を助けてください。ロード後にscriptを適用する必要があります。私はあなたのプロジェクトに似た新しいプロジェクトを作成し

document.onreadystatechange = function() { 
    if (document.readyState === 'complete') { 
     // your code 
    } 
} 

編集

をしてcshtmls and jsを追加します。このように、完全な後、すべてのHTMLタグやスクリプトを適用するためには、JavaScriptでreadyStateを使用することができます。外部のjsはSControl.cshtmlに適用されます。たとえば、Recurrance divにはdisabled属性が追加されています(下の図を参照)。

Error

+0

私はこれを試みたが、まだ動作していない。最初のアコーディオンヘッダーの場合にのみ動作します。それ以外は動作しません。 –

+0

@ Anon_y_20_rajだから、あなたを助けるために 'external js code 'が必要です。 –

+0

外部jsファイルを変更して追加しました。 –

関連する問題