2017-04-23 21 views
1

今、私はonclickをトリガするjavascript関数を持っています。しかし、私は、DOMがロードされたときに同じ関数をトリガする必要があります。しかし、コードの動作に続いて、私はビューの真ん中に 'script'タグを入れたくありません。 bodyタグから関数を呼び出すことはオプションではありません。私はこれを実装したい場所のページロードでjavascript関数を実行

<script>document.addEventListener("DOMContentLoaded",function(){extractions.RefreshCheck(@check.ID)});</script> 

コードスニペット:

@foreach (var check in Model.FailedChecks) 
{ 
    <li class="@(check.IsOK ? Html.Raw("bg-success") : Html.Raw("bg-danger")) " cid="@check.ID"> 
    @Html.ActionLink(check.Display, "XList", "XList", new { filter = check.GetQuery(), Layout = check.Layout }, new { target = "_blank" }); 
    <span class="glyphicon glyphicon-refresh" onclick="extractions.RefreshCheck(@check.ID);" onload="initAutoRefresh"></span> 

    @*<script>document.addEventListener("DOMContentLoaded",function(){extractions.RefreshCheck(@check.ID)});</script>*@ 
    </li> 
} 

上記のコードは動作しますが、私は、私の見解では、スクリプトタグを望んでいません。だから私はJavaScriptを 'onload'イベントリストを使用して、次のコードを追加しようとしたが動作しません。私はこれが問題だと思う。

@foreach (var check in Model.FailedChecks) 
{ 
    <li class="@(check.IsOK ? Html.Raw("bg-success") : Html.Raw("bg-danger")) " cid="@check.ID"> 
    @Html.ActionLink(check.Display, "XList", "XList", new { filter = check.GetQuery(), Layout = check.Layout }, new { target = "_blank" }); 
    <span class="glyphicon glyphicon-refresh" onclick="extractions.RefreshCheck(@check.ID);" onload="extractions.InitAutoRefresh()"></span> 

    </li> 
} 

そして、私のInitAutoRefresh機能:クリックで正常に動作しますRefreshCheck

var extractions= { 
    InitAutoRefresh: function() { 
    if (document.readyState === 'complete') { 
     RefreshCheck(); 
     console.log("function already loaded in DOM") 
    } else { 
     document.addEventListener('DOMContentLoaded', function() { 
      RefreshCheck(); 
      console.log("function loaded in dom"); 
     }); 
    } 

    }, 
RefreshCheck: function(intCheckId){ 
    $('li[cid=' + intCheckId + ']').addClass('bold'); 
    $.get(window.location + '/Home/UpdateIntegritycheck?checkId=' + intCheckId, function(data){ 
     $('li[cid='+intCheckId+']').replaceWith(data); 
    }); 
    } 
} 

機能(すなわち、それはレコードを更新)。あなたのご意見をお寄せいただければ幸いです。ありがとうございました。

答えて

0

一つのアプローチを使用することができますが、あなたがに応じてconditionaly起動できた上で、あなたのhtmlタグにカスタム属性を定義することですタグ値例:次に、遠く離れてあなたの部分図から

<span data-click-on-dom-ready="true" onclick="extractions.RefreshCheck(@check.ID);" ></span> 

は、次のように置くことができます。

$(document).ready(function() { 
    $("[data-click-on-dom-ready='true']").trigger('click'); 
}); 
+0

ありがとう、非常に有望に見えます。間違いなくショットを与えるでしょう。答えは –

+0

ありがとう。今日は新しいトリックを学びました。私の質問が価値があると思うなら、私に最高の投票をしてください。 –

0

このコードを試してみてください。

@section scripts{ 
    <script>document.addEventListener("DOMContentLoaded", function() { xtractions.RefreshCheck(id) });</script> 
} 
+0

これは動作し、私はそれを試してみました。しかし、私の制約は、私は私のビューでjavascriptコードを使用したくないということです。今、私はこれを使用して、それが動作しますが、私は私のビュー(btw、部分的なビューです)内のjsコードをしたくありません。 '

0

あなたはjqueryのを使用している場合、あなたは

$(document).ready(function() { 
    your code here 
}); 
+0

この関数をspanタグからどのように呼び出すことができますか?私はそれを試みたが、私のスパンタグからこのjs関数を呼び出す可能な方法を見つけることができませんでした。興味を持ってくれてありがとう。 –

+0

次のコードは機能しませんでした。 '$(ドキュメント).ready(関数(){ \t VAR結果、 \t(document.readystateで=== '完全な' 場合){ \t \t結果= extractions.RefreshCheck(intCheckId); \t \tにconsole.log ( "既にDOMにロードされた機能") \t}他{ \t \t document.addEventListener( 'DOMContentLoaded'、関数(){ \t \t \t結果= extractions.RefreshCheck(intCheckId); \t \t \tはconsole.log( "関数がロードされましたdom "); \t \t}); \t} \t $( '。glyphicon-refresh').html(result); }); ' –

+0

あなたの関数を$(document)で呼び出すことはできません。準備ができました(function(){あなたのコード}); – Ahefaz

関連する問題