2013-07-01 1 views
1

Я не уверен, почему я получаю ошибку, но я получаю «не могу вызвать метод замены неопределенного». Это происходит на части $('#wizard'+optionalArg), если я удаляю необязательную часть Arg, она работает нормально. Любая идея, почему это происходит?JQuery не может вызвать метод replace of undefined

function loadWizard(optionalArg) 
    { 
    optionalArg = (typeof optionalArg === "undefined") ? "" : optionalArg; 
    $('#wizard'+optionalArg).smartWizard({contentURL:'/welcome/form_view', 
    transitionEffect:'slideleft', onLeaveStep:leaveAStepCallback,onFinish:onFinishCallback, contentCache:false}); 
    } 

вызов функции

var id = 2; 
loadWizard(id); 

прежде чем отправить по ID я запускаю этот

$('#all_wizards').append('<form action="#" method="POST"><div id="wizard2" class="swMain template"></div></form>'); 

так wizard2 должен существовать ..

+1

Что такое $ ('# wizard' + optionalArg) возвращается? Можете ли вы сделать console.log ($ ('# wizard' + optionalArg)); в chrome или firefox и опубликуйте результат. Если он не определен, то нет элемента с этим идентификатором. –

+0

@TomRiley хорошо, если элемент не найден для селектора, тогда он возвращает пустой набор ('length == 0'), но не' undefined'. В противном случае вы не могли бы выполнить 'console.log ($ ('# wizard' + optionalArg) .length);' –

+0

@ t.niese Это так? Достаточно справедливо, хотя [] выплюнул бы подобные будильники. –

ответ

2

Это может быть:

$('#wizard'+optionalArg) //would make wizard2 

В этом html-элементе отсутствует элемент, поэтому вызывается метод исключения undefine throw.

Попробуйте с проверкой нулевой:

function loadWizard(optionalArg) 
{ 
    var myElement=$('#wizard'+optionalArg); 
    if(myElement.length>0){ 
     $('#wizard'+optionalArg).smartWizard({contentURL:'/welcome/form_view',transitionEffect:'slideleft', onLeaveStep:leaveAStepCallback,onFinish:onFinishCallback, contentCache:false}); 
    } 
} 
+3

Большинство плагинов jquery ничего не делают, если селектор не нашел элементов, но, возможно, умный мастер не достаточно умный. – Tommi

+0

Перед тем, как передать аргумент, я запустил этот \t '$ ('# all_wizards'). Append ('

');' – Undermine2k

+0

Не соответствующий селектор возвращает пустой набор а не строка '' undefined'' или 'undefined'. Поэтому вам нужно проверить: 'myElement.length! == 0' –

0

Вы уверены, что у вас есть элемент с

id="wizard1" (assuming optionalArg = 1) 
0

Debug, поставив console.log в ('#' + мастер optionalArg) и проверьте, элемент существует? скорее всего, элемент не существует и, следовательно, создается и возникает ошибка.

Смежные вопросы