2

我有 2 个标志图片链接,德语和英语。当用户单击德国国旗时,我想禁用onclick德语。如果用户单击英语,那么我想再次重新启用onclick德语。

我正在使用它,但它不起作用:

jQuery(document).ready(function() {

$('a#German').click(function() {
   $(this).removeAttr('onclick').unbind('click');
 });

 $('a#English').click(function() {
    $('a#German').attr('onclick').bind('click');
 });

});
4

3 回答 3

1

而不是切换所有这些处理程序并让自己发疯,我会尝试这种方法:

<a href="#lang-1" class="language-choice language-choice-selected" data-lang="lang-1">Lang 1</a>
<a href="#lang-2" class="language-choice" data-lang="lang-2">Lang 2</a>
<a href="#lang-3" class="language-choice" data-lang="lang-3">Lang 3</a>

然后,在我的 Javascript 中,我会这样做:

var $languageChoices = $('.language-choice');

$languageChoices.on('click', function(){
  var $link = $(this);
  if( ! $link.is('.language-choice-selected')){
    var language = $link.data('lang');
    $languageChoices.removeClass('language-choice-selected');
    $link.addClass('language-choice-selected');
    switchLanguageTo(language); // I guess?
  }

});

这样,如果您选择当前语言,您就不会做任何事情。

于 2013-10-25T03:07:02.837 回答
1

只是为了简化一点farmerjoe,您可以将点击事件委托给标志按钮的第一个公共父级,并使用一个类来切换它们的活动状态,如下所示:

var buttons = $("#german, #english");
var parent = $("#parent");  // or whatever the common parent is

parent.on("click", "#german, #english", function() {
    buttons.toggleClass("active");
}

parent.on("click", "#german.active", german_handler );
parent.on("click", "#english.active", english_handler );

请注意,您需要使用active该类启动其中一个按钮。

于 2013-10-25T03:19:33.363 回答
0

您需要使处理程序已知,如下所示:

它的工作方式是加载窗口,jQuery(document).ready(function() {//code})然后命令调用作为其参数给出的函数。该函数在运行时会找到元素,在这种情况下是您的英语和德语按钮,并为它们提供一些click事件发生时的协议。这就是bind("event",my_named_handler)函数的作用。参数是"event"描述您正在等待的事件类型的参数,处理程序是将处理事件的函数。如果您将此分配为函数,bind("click",function(){//code})则该函数将保持匿名且无法引用。你打电话时unbind("click",my_named_handler)您的代码将查找已链接到您的元素的处理程序并将其删除。如果您已经使用匿名函数的方式,那么您将无法通过任何简单的方法进行引用。通过在变量中定义您的处理程序,您可以将相同的处理程序传递给bindand undbind,使链接和取消链接发生,因为该函数确切地知道您在这两种情况下引用的处理程序。

是将bind("event",handler)元素链接到事件侦听器的函数,并且

var german_handler = function() {
     // do german clicky stuff

};
var english_handler = function() {
     // do english clicky stuff
};

jQuery(document).ready(function() {
    $('#German').bind("click",german_handler);
    $('#German').bind("click",function() {
        $('#German').unbind("click",german_handler);
    });
    $('#English').bind("click",english_handler);
    $('#English').bind("click",function() {
        $('#German').bind("click",german_handler);
    });
});

此外,最好使用#German而不是a#German,id标签通常应该是唯一的。

于 2013-10-25T02:58:18.047 回答