Почему этот .click () не работает как .hover ()?

0

Это работает:

$("a.hover").hover(function (){
        $(this).css("text-decoration", "underline");
    },function(){
        $(this).css("text-decoration", "none");
    }
);

Это не означает:

$("a.click").click(function (){
        $(this).css("text-decoration", "underline");
    },function(){
        $(this).css("text-decoration", "none");
    }
);

Я понимаю, что это может быть не так, чтобы работать так, но почему бы и нет?

Я также не совсем уверен, что вторая функция после запятой на самом деле. Я только когда-либо писал это так:

$("a.click").click(function (){
        $(this).css("text-decoration", "underline");
    });

http://jsfiddle.net/tmyie/4DygF/7/

Любые разъяснения были бы замечательными.

  • 3
    Итак, вы изобрели синтаксис, а потом удивляетесь, почему он не работает?
  • 0
    Пытаясь понять логику этого
Показать ещё 1 комментарий
Теги:

7 ответов

4

.click() регистрирует обработчик кликов для целевого набора элементов, hover() - это ярлык для регистрации обработчиков mouseenter и mouseleave.

hover:

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

.click() также имел аналогичный короткий, используя .toggle(), но был удален в jQuery 1.9.

Пока же, если вы хотите получить такую же функциональность, вы можете посмотреть эту функцию toggleClick()

0

Если вы хотите, click, чтобы вести себя как toggle.Try этого:

var a=1;
$("a.click").click(function (){
if(a==1){
    $(this).css("text-decoration", "underline");
    a=0;
}else{
    $(this).css("text-decoration", "none");
    a=1;
}
});

демонстрация

0

Это потому, что с .hover вы можете добавить два обработчика (handlerIn, handlerOut), но .click имеет только один обработчик

0

.hover() принимает два обратных вызова - один для зависания и один для зависания. .click() должен быть предоставлен только один обратный вызов. Поскольку вы даете ему два, это на самом деле думает, что второй - это обратный вызов.

0

Вы можете заставить его работать, делая что-то вроде этого:

// listen for a.click to be clicked within the scope of the body
$('body').on('click', 'a.click', function(e){

    // prevent the click from registering
    e.preventDefault();

    // check if text-decoration is an underline
    if($(this).css('text-decoration').substring(0, 9) == 'underline'){
        // set it to nothing
        $(this).css('text-decoration', 'none');
    }
    else{
        // set it to underline
        $(this).css('text-decoration', 'underline');
    }
});
0

для клика вы можете использовать if/else так: потому что событие Click имеет 1 функцию обратного вызова

    var state=0;
    click(function(){
    if(state==0){
    //do this
    state=1;
    }
else{
    //do this
    state=0;
    }
    });
0

Определение события клика jQuery, как показано на http://api.jquery.com/click/, следующее:

.click( handler(eventObject) )

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

  • 2
    Причина, по которой он не работает, заключается в том, что у него также есть второе определение .click( [eventData ], handler(eventObject) ) . Таким образом, вторая функция фактически используется в качестве обработчика. В противном случае это будет работать нормально, JavaScript не против дополнительных параметров.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню