2017-08-15 52 views
-1

我正在處理兩個單獨的HTML文件;文件一個是是主頁,而文件兩個包含一個Kendo-UI彈出對話框的主體。彈出窗口在主頁面中使用。如何在jQuery選擇器中更改上下文

在JavaScript文件,我嘗試引用一個HTML元素是在文件一個。它不起作用。

通過一些調試,我已經成功地發現了以下內容:

// In Javascript of file two. 
console.log($("#StartPayrollButton")); 
// Output in Firefox console: 
Object { context: HTMLDocument → CalendarDetails, selector: "#StartPayrollButton" } 

這裏就是我得到的,當我在控制檯手動運行在同一行

// Manually run in the Firefox console. 
console.log($("#StartPayrollButton")); 
// Output in Firefox console: 
Object { 0: <a#StartPayrollButton.btn.btn-large.btn-squared-default.blue>, length: 1, context: HTMLDocument → MA0004, selector: "#StartPayrollButton" } 

人向我解釋發生了什麼事?我注意到context在結果上是不同的;第一個結果參考文件兩個,而第二個結果參考網頁(因此文件一個)。

但是,在這種情況下(可怕雙關語意圖)的背景是什麼?我能否以某種方式更改代碼中的上下文(當使用jQuery選擇器時)?

編輯:我去了,發現如何創建對話框。這的確是一個iframe

// Razor in file one. 
@(Html.Kendo().Window() 
     .Name("PayrollWindow") 
     .Title("Start Payroll") 
     .Content("Loading payroll options...") 
     .LoadContentFrom("CalendarDetails", "Payroll", new { co = Model.Co, guid = Model.calendarId }) 
     .Draggable() 
     .Modal(true) 
     .Iframe(true) 
     .Visible(false) 
     .Width(800) 
     .Height(530) 
     .Deferred() 
    ) 
+0

通過頁面,你真的意味着兩個不同的網頁,因爲你的對話框正在使用一個iframe? –

+0

使用不同的ID來避免像「#StartPayrollButton-one」這樣的混淆。 –

+0

@KevinB我不知道,因爲我原本沒有實現這個。我明天他可以問問開發商。 –

回答

1

的情況下,基本上是在那裏開始對指定選擇搜索的起點,在本地JavaScript相當於將像

var context = document.getElementById('parent'); // the context here is "document" 

var child = context.getElementById('child'); // now the context is the "#parent" element 

在jQuery的你」在jQuery的意思是一樣的東西d組上下文作爲第二個參數$()

$(selector, context) 

$('#child', '#parent') 

當然,這只是一個例子,ID必須是唯一的,所以使用上下文ID的是不是真的neccessary,但對於一些其他類型的選擇是有意義的做這種方式,只選擇內的元素其他元素等其實jQuery的背景下做完全一樣的事情

$('#parent').find('#child') 
+0

謝謝你的澄清!是否有可能強制上下文成爲整個HTML頁面,而不僅僅是Kendo-UI對話框? –

+0

我想這取決於什麼是調用'$()',如果你不能控制給定的上下文如何調用'$()',你可能不能在以後改變它。 – adeneo

0

我最終通過執行以下操作解決問題:

window.parent.$("#StartPayrollButton");

注意window.parent允許單獨的iframe中的對話框訪問主頁面中的元素。

相關問題