2011-04-15 32 views
1

我在加載HTML對話框上單擊jQuery的對話框無法看到全局變量

$("button").live('click', function() { 
    var $div = $('<div title="Form"></div>'); 
    $div.load('test.html #formModal').dialog({ 
     width: 900, 
     height: 500 
    }) 
}) 

按鈕時#formModal的HTML看起來像

<form id="form"> 
    <input id="input1" type="button" /> 
    <input ... 
    </form> 
    <p id="formEdit"></p> 

此時HTML是成功加載對話框

我也有以下內容,當點擊裏面的對話框#input1時,它會在0內插入文本。

var $form = $('#form'); // global variable 
var $formedit = $('#formEdit'); // global variable 
$form.find('#input1').live('click', function(){ 
$formedit.text('test'); //if i do $('#formEdit') instead of $formedit then it works 
}) 

$formedit在這裏不起作用。它沒有被傳遞給點擊處理程序。它工作正常,如果HTML最初是在body而不是使用load()加載對話框。這是什麼造成的。

+0

@mu'$( '#formEdit')'的作品,但不是'$ formedit'。這告訴我,$ formedit正在被傳入。 – Pinkie 2011-04-15 02:30:02

+0

@mu' $ formedit'如果我的HTML最初存在於DOM中,則工作正常。但是因爲我在對話框中加載內容,它不再有效。我必須執行$('#formEdit')才能使其工作。 – Pinkie 2011-04-15 02:34:36

回答

3

由於forModal是動態加載的formEdit不能用於常規頁面加載。

試試這個:

$("button").live('click', function() { 
    var $div = $('<div title="Form"></div>'); 
    $div.load('test.html #formModal', function(){ 
     //#######ASSIGN THE #formEdit once the load is complete 
     $formedit = $('#formEdit'); 
    }).dialog({ 
     width: 900, 
     height: 500 
    }); 

}) 
+0

這是做到這一點的方法。 'var'使局部變量(函數,文檔或窗口)成爲局部變量。 – 2011-04-15 02:37:37

+0

工作。但現在我有2個變量參考,內部負載和外部。刪除兩個將再次打破它。我們是否需要在兩個地方聲明變量。如果我有變量infront – Pinkie 2011-04-15 03:04:11

+0

@Pinkie它是否有所作爲:你仍然有一個變量。唯一不同的是你正在給變量$ formEdit重新賦值。事實上,你可以改變變量的定義爲var $ formedit = null;從var $ formedit = $('#formEdit'); – Chandu 2011-04-15 03:07:35

0

嘗試類似:

var $form = $('#form'); // global variable 
var $formedit = $('#formEdit'); // global variable 
$form.find('#input1').live('click',{formedit: $formedit} , function(e){ 

e.data.formedit.text('test'); //if i do $('#formEdit') instead of $formedit then it works 
})