jQuery IF var = value или #id нажали - PullRequest
1 голос
/ 12 января 2012

У меня теперь работает аспект .live, поэтому, если щелкнуть ссылки, моя функция будет выполнена, но я пытаюсь выяснить, как включить параметр для прямой ссылки на контент. Примерно так:

$(showDiv).is('shipping-timeline')
or
$("#inm_if_hc_shipping_timeline").live('click', function() {
  [code to show and hide divs]            
});

showDiv содержит значение, которое идентифицирует правильный идентификатор, извлеченный из URL.

Мой вопрос: как мне составить оператор IF для выполнения, если любой из вариантов имеет значение true?

Кто-нибудь может помочь? Спасибо!

UPDATE:

Итак, я взял части IF из ответа Грейдота и применил его к своему коду, и вот более полный пример того, как он выглядит сейчас:

$("#inm_if_hc_faq").bind('click', function(e) {
    if(showDiv == 'faq') {
            // prevent default behavior
            e.preventDefault();

            $("#inm_if_hc_content_faq").show("slow");   
            $("#inm_if_hc_content_shipping_timeline").hide("fast");
    }

        });

Самой важной частью, которую мне не хватало, было поведение по умолчанию и IF, который переопределяет его ... спасибо, Грейдот!

Теперь, когда ссылка нажата, div отображается так, как должно, но не при вводе URL.

Пример: http://myurl.com/thispage.html?show=faq

Я не включил здесь функцию, которая заполняет переменную showDiv, но в консоли я убедился, что она содержит 'faq', как и должно быть.

Кто-нибудь видит, чего мне все еще не хватает?

Спасибо!

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: РЕШЕНИЕ

Сначала я не понял этого, но решение оказалось переосмыслить мой подход. Я ценю, что кто-то мог видеть сквозь мое невежество и придумал отличное решение.

Вот пример рабочего кода:

$(window).bind('hashchange', function () {
    var hval = location.hash.slice(1);

    if (hval == "faq") {
        $("#inm_if_hc_content_faq").show("slow");   
                    $("#inm_if_hc_content_shipping_timeline").hide("fast");
    }
});

$(document).ready(function() {

    $(window).trigger('hashchange');

});

При этом ссылка может быть простой: href = "# faq" или с другой страницы href = "http://mydomain.com/mypage#faq". Нет необходимости анализировать URL-адрес переменной или использовать оператор IF для определения разницы между навигационной ссылкой или внешней ссылкой.

Надеюсь, это поможет кому-то еще, так что тогда я не буду чувствовать себя таким невежественным! ;)

Ответы [ 2 ]

1 голос
/ 12 января 2012

Jsfiddle здесь http://jsfiddle.net/xff82/

<body>
  <a href="#target_div">Toggle</a>
  <div id="target_div">Some content</div>
</body>

Сценарий будет

<script type="text/javascript">
  $(document).ready(function(){
    $('a').bind('click', function(e){
      // check that target points to a id, rudimentary check
      var target = (/#\w+/).exec(this.href); // null if does not match
      if (target){
        // prevent default behavior
        e.preventDefault();
        //jQuery toggle. show/hide div
        $(target[0]).toggle();
      }
    })
  });    
</script>
1 голос
/ 12 января 2012

Может быть, используете хэштег?Связав событие «hashchange» вместо события «click», вы сможете получить желаемый результат.

// run specific code based on the url hash
$(window).bind('hashchange', function () {
    var hval = location.hash.slice(1);
    if (hval == "timeline") {
        // run whatever code or function you like
    }
});

// trigger it on page load
$(document).ready(function () {  
    $(window).trigger('hashchange'); 

});

Теперь просто сделайте вашу кликабельную ссылку похожей на

<a href="#timeline">click me</a>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...