2012-11-30 3 views
0

Я пытаюсь запустить функцию jQuery с некоторыми другими функциями Javascript. Я полагаю, что я правильно понимаю синтаксис. У меня есть colorbox, который открывается при загрузке страницы с помощью формы. Когда форма отправлена, я пытаюсь сначала выполнить проверку, а затем, если успешно, запустите функцию jQuery, которая закрывает Colorbox и проверяет родительское окно. Вот где я сейчас (кстати, с этим я был всем кругом. Я смог заставить функцию jQuery работать, я получил функции проверки, чтобы работать, но я . никогда не получали их работать вместе, я прошу прощения, если я получил способ покинуть базу, но я думаю, что я отдалился, так как я пытался что-то новое):Функция jQuery и функции Javascript не работают вместе

Просто попытался это:

window.echeck(str) = function { 

    var at="@" 
    var dot="." 
    var lat=str.indexOf(at) 
    var lstr=str.length 
    var ldot=str.indexOf(dot) 
    if (str.indexOf(at)==-1){ 
     alert("Invalid E-mail ID") 
     return false 
    } 

    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){ 
     alert("Invalid E-mail ID") 
     return false 
    } 

    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){ 
     alert("Invalid E-mail ID") 
     return false 
    } 

    if (str.indexOf(at,(lat+1))!=-1){ 
     alert("Invalid E-mail ID") 
     return false 
    } 

    if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){ 
     alert("Invalid E-mail ID") 
     return false 
    } 

    if (str.indexOf(dot,(lat+2))==-1){ 
     alert("Invalid E-mail ID") 
     return false 
    } 

    if (str.indexOf(" ")!=-1){ 
     alert("Invalid E-mail ID") 
     return false 
    } 

    return true      
} 

window.ValidateForm() = function{ 
var emailID=document.MailingList.emailaddress 

if ((emailID.value==null)||(emailID.value=="")){ 
    alert("Please Enter your Email ID") 
    emailID.focus() 
    return false 
} 
if (echeck(emailID.value)==false){ 
    emailID.value="" 
    emailID.focus() 
    return false 
} 
return true 
} 

$(document).ready(function() { 
    $('#submitbutton').live('click', function(e) {  
     ValidateForm(); 
     parent.$.fn.colorbox.close(); 
     parent.location.href = "/SearchResults.asp?Cat=1854"; 
    }); 
}); 

I не выполнял ни одну из функций.

Когда я удаляю ValidateForm(); из jQuery и когда я помещаю синтаксис функций javascript обратно в function ValidateForm(); вместо window.ValidateForm = function(), jQuery работает, но, конечно, другие функции javascript этого не делают.

+0

Не то, что вы просите о , но ваше тестовое условие проверки электронной почты 'str.indexOf (at) == lstr' не делает то, что вы думаете, потому что' lstr' - 'str.length', а длина строки - больше, чем индекс последнего (поскольку индексы основаны на нулевом значении). Если вы пытаетесь протестировать последний символ, вам нужно 'str.indexOf (at) == lstr-1'. Но я бы предложил вам заменить полдюжины операторов 'if', которые проверяют формат электронной почты с помощью однострочного регулярного выражения' .test() '. – nnnnnn

ответ

1

Я не создавать вложенные функции внутри главной функции JQuery

Вы не можете ссылаться на функции из-за пределов $(document).ready(function() { }); блока, потому что это частная сфера. Вам нужно либо определить одну из функций вне области, так что он доступен -

$(document).ready(function() { 

    // define in the global scope (window) so that it's accessible anywhere 
    window.ValidateForm = function() { ... } 
}); 

// this works 
ValidateForm(); 

или проволочная свои события, используя on -

$(document).ready(function() { 
    $("#theform").on("submit", ValidateForm); 
}); 
+0

_ «потому что это закрытие». _ - Вы смешиваете «закрытие» и «область действия». – nnnnnn

+0

@nnnnnn hm, я думаю, что да. Надеюсь, это лучше. – McGarnagle

+0

Если я определил функцию вне области видимости (я понимаю, что лучше, чем другой), я бы просто должен был назвать ее нормальной функцией, то есть ValidateForm(); если бы я использовал ваш пример выше? – MillerMedia

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