2011-04-15 3 views
1

Я погрузочные HTML в диалоговом окне при нажатии на кнопку наJQuery Диалог не может увидеть глобальные переменные

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

HTML, из #formModal выглядит

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

На данный момент HTML успешно загружен в диалоговом окне

У меня также есть следующее, которое при щелчке по диалогу #input1 внутри будет содержать текст внутри #formEdit.

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'. Это говорит мне, что $ formit передается. – Pinkie

+0

@mu '$ generatedit' работает, если мой HTML первоначально существовал в DOM. Но поскольку я загружаю контент внутри диалога, он больше не работает. Я должен сделать '$ ('# formEdit')' для его работы. – Pinkie

ответ

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» делает переменную локальной для контекста (функция, документ или окно). –

+0

Это сработало. Но теперь у меня есть 2 ссылки на переменные, внутри и снаружи. Удаление либо сломает его снова. Нужно ли иметь переменные, объявленные в обоих местах. Это имеет значение, если у меня есть var infront переменных – Pinkie

+0

@Pinkie: У вас все еще есть одна переменная. Единственное отличие заключается в том, что вы переназначаете значение переменной $ formEdit. Infact вы можете изменить определение переменной на var $ formit = null; из var $ formit = $ ('# formEdit'); – Chandu

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 
}) 
Смежные вопросы