2012-08-07 2 views
0

Я хотел бы выполнить функцию только на одной странице моего сайта, где тело имеет идентификатор # modulePage16460412. У меня есть сценарий ниже, который не работает.Выполните функцию, если id тела является определенным значением

<script type="text/javascript"> 
if($('#modulePage16460412').length > 0) { 
$(function() 
{ 
$(window).bind('load', 
    function(e) 
    { 
    window.setTimeout(function() 
     { 
     $.colorbox({opacity:0.3, href:"/storage/support/colorbox/offer.html"}); 
     }, /*timeout->*/ 2000); 
    }); 
}); 
} 
</script> 

Будет ли это быть возможным только выполнить функцию в первый раз, когда они посещают страницу и не выполнить еще раз, если они вернутся на эту страницу?

Любая помощь будет оценена по достоинству.

+1

Почему бы не использовать эту функцию в скрипте и только добавить его в HTML на страницах, которые должны его использовать? –

+0

Вторая часть вашего вопроса должна будет использовать файлы cookie или localStorage. Я предпочитаю localStorage в этом случае, потому что сервер действительно не заботится об этой информации, поэтому зачем его хранить в файлах cookie и отправлять на сервер. LocalStorage существует только на клиенте. – rlemon

+0

Идеальное решение scott.korin! Определенно «почему я не подумал об этом» момент :) Спасибо! – Travis

ответ

0

Необходимо установить условие внутри $(function(){, чтобы тег тела был фактически загружен до того, как JavaScript запросит (разгруженную) DOM для существования идентификатора.

$(function(){ 
    if($('#modulePage16460412').length) { 

     ... 

    } 
}); 
0

Ваше определение функции, но не вызов в любом месте.

поэтому поместите все в какую-то функцию и позвоните. ($ ('# ModulePage16460412')), потому что, когда jquery не сможет найти элемент с id: # modulePage16460412, он будет возвращать пустое значение. массив. empty_array.length = 0, поэтому он всегда будет правдой.

$('document').ready(function(){ 

if($('#modulePage16460412')) { 
$(function() 
{ 
$(window).bind('load', 
    function(e) 
    { 
    window.setTimeout(function() 
     { 
     $.colorbox({opacity:0.3, href:"/storage/support/colorbox/offer.html"}); 
     }, /*timeout->*/ 2000); 
    }); 
}); 
} 

}); 
1

Вы можете просто поставить функцию от нагрузки тела, выбрав его с идентификатором, определенным ... если ни один элемент не существует с этим идентификатором, то функция никогда не будет огня.

$('#modulePage16460412').load(function() { // this will not be called unless an element with that ID has loaded into the DOM 

    // ... your code here. 

}); 

и коснуться «одного исполнения» части (это действительно должен быть новый вопрос ... но ооо хорошо), вы можете использовать LocalStorage сохраняться настройки.

http://jsfiddle.net/rlemon/ET9Zg/

в вашем случае что-то вроде

if(!getData('someKey')) { 
    // ok so they have not been here. 
    setData('someKey', 1); // now set the data so this won't get hit again. 
} 
0

Возможно, более простой подход?

$(document).ready(function() { // runs code only after DOM ready 
    if ($('#modulePage16460412').length > 0) { // runs code only if id found 
     window.setTimeout(function() { 
      $.colorbox({ opacity:0.3, href:"/storage/support/colorbox/offer.html" }); 
     }, 2000); 
    } 
}); 
Смежные вопросы