Какой самый элегантный способ вставить это условное утверждение? - PullRequest
0 голосов
/ 21 июля 2011

Я хотел бы передать переменную, чтобы вызвать этот метод на click или hover.

Прямо сейчас, по умолчанию щелкнуть.

    var defaults = {    
        xOffset: 10,        
        yOffset: 25,
        tooltipId: "easyTooltip",
        clickRemove: true,
        content: "",
        useElement: "",
        clickAppear: true
    }; 

    var options = $.extend(defaults, options);  
    var content;

$(this).click(function(e){
    $("#" + options.tooltipId).remove();                                                               
    content = (options.content != "") ? options.content : title;
    content = (options.useElement != "") ? $("#" + options.useElement).html() : content;
    $(this).attr("title","");                                                   
    if (content != "" && content != undefined){         
        $("body").append("<div id='"+ options.tooltipId +"'>"+ content +"</div>");      
        $("#" + options.tooltipId)
            .css("position","absolute")
            .css("top",(e.pageY - options.yOffset) + "px")
            .css("left",(e.pageX + options.xOffset) + "px")                     
            .css("display","none")
            .fadeIn("fast");
    return false;
    }
},

Я хочучтобы я мог передать вызов метода, который clickAppear = false, и в этом случае он альтернативно произвел бы это:

$(this).hover(function(e){
  ...

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

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 21 июля 2011

Ну, вы можете просто написать:

$(this)[options.clickAppear ? "click" : "hover"](function(e) {
  // your code
});

Это просто проверяет эту опцию и выбирает функцию «щелкнуть» или «зависать» и вызывает ее.

1 голос
/ 21 июля 2011

Просто используйте именованную функцию:

function doStuff() {
  ..
}

$(this).click(doStuff);
$(this).hover(doStuff);
1 голос
/ 21 июля 2011

Вы должны объявить вашу функцию-обработчик как переменную:

var myFunc = function(e){ // your handling code here
};

Затем в вашей функции, которая прикрепляет обработчик к событиям, вы ставите ваше условие:

if(options.clickAppear)
   $(elem).click(myFunc);
else
   $(elem).hover(myFunc);
0 голосов
/ 21 июля 2011

Как отмечено в комментариях, это, вероятно, не будет работать как есть, потому что первый экземпляр this не имеет контекста - и, следовательно, не определен.Но это общая идея:

$(this).click(function(e){
    // your method
}).hover(function(e){
    $(this).trigger('click');
});
...