2010-11-05 4 views
0
$('.field').blur(function() 
    $('*').not('.adress').click(function(e) { 
       foo = $(this).data('events').click; 
       if(foo.length <= 1) { 
    //    $(this').next('.spacer').children().removeClass("visible"); 
       } 
       $(this).unbind(e); 
     }); 
}); 

Я пытаюсь удалить класс «видимым, когда я bluring поля, классифицируемые .field, если если я щелкните элемент с классом .adress.JQuery обход дерева вопрос

Поля blur и adress-click работают как надо (я устал от него с предупреждением), но не с удалением класса, кто-нибудь знает почему?

Удаление класса работает, если функция not (". adress") удалены! НЕТ:

$('.field').blur(function() { 
    (this).next('.spacer').children().removeClass("visible"); 
}); 
+0

Чтобы быть ясным, ваше намерение обнаружить, если я оставлю '.field' ***, нажав на кнопку ***.' Asad'? Это то, что похоже на ваш вопрос, но ваш код на самом деле прикрепляет обработчик '.click()' во время размытия, поэтому необходимо задействовать два отдельных события щелчка. – VoteyDisciple

+0

Я хочу обнаружить, если я leac поле, кроме *, нажав на * a. Адрес – Himmators

+0

leac = click !!!! – Himmators

ответ

0

Я пытаюсь удалить класс «видимым, когда я bluring полевую классифицироваться .поле, если если я щелкните элемент с классом .adress. Это довольно сложно .Как ваш текущий код делает обязательным является привязка обработчик события click каждый раз, когда вы размываете элемент с классом field. Это не будет работать так, как вы этого хотите.

Лучший кросс-браузерный способ я могу думать из этого сделать, чтобы прослушать focus события и журнал, какой элемент получил фокус, takin g на ранее активном элементе:

$(document).ready(function(){ 
    var curFocus; 

    $(document.body).delegate('*','focus', function(){ 
     if ((this != curFocus) && // don't bother if this was the previous active element     
      ($(curFocus).is('.field')) && // if it was a .field that was blurred 
      ($(this).is('.adress')) // the newly focused field is an .adress 
     ) { 
      $(curFocus).next('.spacer').children().removeClass("visible"); // take action based on the blurred element 
     } 

     curFocus = this; // log the newly focussed element for the next event 
    }); 
}); 

Это, вероятно, имеет довольно низкую производительность. Если вас не беспокоит совместимость между браузерами, особенно для старых версий, вам может быть интересен document.activeElement.

+0

cool, I ', пытаясь выяснить, какие браузеры поддерживают активный элемент, мы хотим поддерживать IE7 + (и chrome safari firefox, но они обычно проигрывают IE). Знаете ли вы, что браузеры поддерживают activeElement? – Himmators

+0

Небольшое исследование показало, что 'activeElement' на самом деле ничего не делает для вас здесь, потому что он установлен * после того, как вызывается' 'blur''. FWIW, IE является самым надежным сторонником этого, потому что он был первоначально проприетарной особенностью IE, принятой HTML5. Вышеупомянутый метод, вероятно, лучший, который вы получите. – lonesomeday

+0

Хорошо, я потрачу некоторое время на то, чтобы понять это! огромное спасибо! – Himmators

0

у вас есть дополнительная цитата после //$(this. вам не нужно указывать переменную this.

Кроме того, ваш селектор * может быть упрощено до $(':not(.address)')

Можете ли вы привести пример вашего HTML?

+0

образец: http://dev.resihop.nu/addtrip?from=&to=&when=&name=&email=&phone=&details=&posted=&got_car=1 – Himmators

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