2016-09-28 96 views
1

在我的主視圖中我有ajax操作鏈接MVC在部分視圖中使用JS

@Ajax.ActionLink("Update Hours", "companyhours", "business", 
new { Id = ViewBag.Id }, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "divCurrentView" }) 

public ActionResult CompanyHours(string Id) 
    { ... return PartialView("UpdateCompanyHours", model);} 

認爲大幹快上點擊

局部視圖 「UpdateCompanyHours.cshtml」 我有

@model CompanyHoursVM 
@{Layout = null; } 
@using (Ajax.BeginForm("CompanyHours", new AjaxOptions { UpdateTargetId = "presult", HttpMethod = "POST", InsertionMode = InsertionMode.Replace })) 
{  
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken() 

    // i have textboxes and a button - everything loads fine 
    @Html.CheckBoxFor(model => model.Open247, new { @class = "Time24hrs"}) 
} 

這裏裝載的控制器裏面是問題:

我想在我的主視圖中添加我的js文件。該代碼添加到主視圖頁面的底部:

@section Scripts 
{ 
    <script src="~/Scripts/myjs.js"></script> 
} 

甚至沒有@section腳本標記

JS文件非常簡單。第一次警報執行,但onclick它不會

(function() { 
$(function() { 
    alert("alert1"); 
    $('.Time24hrs').click(function() { 
     alert("alert2"); 
    }); 
}); 
})(); 

js未被識別。但如果我在部分視圖中添加js文件,它可以正常工作

如何在主視圖中加載js文件並在部分視圖中使用js文件?

回答

3

當你點擊「更新時間」鏈接時,ajax代碼動態地將新的DOM元素注入到當前dom(來自局部視圖的標記)。但是,您的點擊事件是使用現有元素(加載頁面時的當前元素)註冊的。沒有點擊事件處理程序註冊這些新的DOM元素。

使用jQuery on方法來綁定click事件。使用on方法,您可以註冊當前和未來元素的事件的DOM

這應該有效。

$(function() { 

    $(document).on("click",".Time24hrs",function() { 
     alert("alert2"); 
    }); 

}); 
+0

謝謝你Shyju – Ben

0

我敢打賭,調用主頁的加載函數後,ajax會異步返回部分完成,在這種情況下,您沒有機會設置事件處理程序,因爲該元素尚未添加到dom。您需要以某種方式通知您部分加載的時間。