2013-12-03 4 views
0

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

$("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

Итак, вы изобрели синтаксис, а затем удивляются, почему он не работает? – JJJ

+0

Попытка понять логику этого –

+0

синтаксис входа/выхода обработчика не может использоваться для события onclick –

ответ

4

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

hover:

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

.click() также была подобная краткость, используя .toggle(), но это было removed in jQuery 1.9.

На данный момент, если вы хотите ту же функциональность, вы можете посмотреть на this toggleClick() implemetation

0

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

0

Определения события нажатия JQuery, как показано на http://api.jquery.com/click/ является:

.click(handler(eventObject)) 

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

+2

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

0

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

var state=0; 
    click(function(){ 
    if(state==0){ 
    //do this 
    state=1; 
    } 
else{ 
    //do this 
    state=0; 
    } 
    }); 
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

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

0

Если вы хотите, чтобы click вел себя как toggle.Попробуйте это:

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; 
} 
}); 

Demo

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