#jquery #html
#jquery #HTML
Вопрос:
$(function () {
var mainimagepanel = $("#blah1");
var postimagepanel = $("#blah2");
});
оба объекта существуют на странице, где я запускаю свой $. может кто-нибудь показать мне, почему я получил исключение, mainimagepanel не определен
исключение, вызванное Firebug или Chrome dev tool. итак, кто-нибудь может сказать мне причину и как я могу проверить, существует ли элемент управления вводом для обоих.
Комментарии:
1. Я предполагаю, что здесь есть еще код, который вы не показываете. На что вы ссылаетесь
mainimagepanel
позже?2. Вы пытаетесь получить доступ к этим переменным вне этой функции?
3. нет, я просто использую Chrome dev tool и firebug, и оба выдают мне исключение, которое не определено. если я передам var mainimagepanel = $(«#blah1»);mainimagepanel, тогда он покажет мне правильные вещи.
Ответ №1:
Ваши переменные объявлены внутри анонимной функции, и это их область видимости. Они не существуют вне этой функции. Чтобы исправить это, вы можете сделать что-то вроде:
var mainimagepanel, postimagepanel;
$(function () {
mainimagepanel = $("#blah1");
postimagepanel = $("#blah2");
});
Однако обычно рекомендуется ограничить ваши переменные так, чтобы они существовали в максимально ограниченном объеме.
Комментарии:
1. sje397 абсолютно прав и в том, что это исправит проблему, и в том, что это плохая идея. Бегло взгляните на мой ответ, чтобы лучше понять, почему.
Ответ №2:
Вот мое предположение. Я попытаюсь углубиться немного дальше, чем в других ответах. У вас есть это:
$(function()
{
var mainimagepanel = $('#blah1');
var postimagepanel = $('#blah2');
});
// ... bunch of code ...
mainimagepanel.show(); // oh no!
Вы только что столкнулись с чем-то, называемым scoping. В частности, вы столкнулись с чем-то, называемым областью действия.
Давайте проведем пару экспериментов.
var a = 'hello';
var myfunc = function()
{
alert(a);
var b = 'goodbye';
alert(b);
};
alert(a); // pops 'hello'. good, we expected that.
myfunc(); // pops 'hello', then 'goodbye'. good, that seems right too.
alert(b); // error. because b was declared inside of myfunc, it doesn't exist out here.
var myfunc2 = function()
{
a = 'greetings';
};
myfunc2();
alert(a); // pops 'greetings'. because myfunc2 is inside of our main code here, it can see the a out here.
var myfunc3 = function()
{
var a = 'salutations';
alert(a);
};
myfunc3(); // pops 'salutations'. that seems reasonable, that's what we just set it to.
alert(a); // pops 'greetings'. huh? turns out, because we var'd the a this time, it made a *new* a inside of myfunc3, and when you start talking about a, it assumes you want that one.
Надеюсь, это прояснит ситуацию. Короче говоря, вы хотите сделать это вместо:
$(function()
{
var mainimagepanel = $('#blah1');
var postimagepanel = $('#blah2');
// ... put your code here ...
});
// ... instead of here! ...