3

我正在尝试替换/替换下面的 jQuery 目标之一(不是 HTML 元素),具体取决于用户选择的语言。

例如,如果用户选择英语作为语言,我想删除#English目标,但保留其他(即#Spanish, #German)。

我怎样才能做到这一点?

 $( "#English, #Spanish, #German").click function { blah, blah, blah };
4

5 回答 5

3

看起来您只想触发一次元素的处理程序,在这种情况下使用.one()

$( "#English, #Spanish, #German").one('click', function(){
})
于 2013-11-11T16:42:52.810 回答
3

解绑id点击事件

$("#English, #Spanish, #German").click( function(){

    $(this).unbind('click');

});
于 2013-11-11T16:44:05.637 回答
1

一种简单的方法是只检查处理程序以查看它是否是所选语言。

var chosen_language = 'English'; // This can be updated by some other code

$("#English, #Spanish, #German").click(function() {
    if (this.id != chosen_language) {
        blah blah blah;
    }
});
于 2013-11-11T16:39:36.337 回答
0

您可以将谁被选中传递给一个变量,然后将其用作主要目标的过滤器:

var filter = $('#english');
$('#german, #english, #spanish').not(filter).on('click',function(){ //...

另外,避免使用.click(),.on()代替(如果你没有使用旧的 jQuery 版本)。

小提琴

于 2013-11-11T16:49:31.073 回答
0

首先,我认为这不是event handler使用IDs绑定71元素的正确/好方法(您在问题中提到),例如

$( "#English, #Spanish, #German").click(...);

相反,您可以class像这样将 a 用于所有元素

<a class='language' id="English" href="whatever">English</a>
<a class='language' id="Spanish" href="whatever">Spanish</a>
<a class='language' id="German" href="whatever">German</a>

在这种情况下,您不需要单独ID的 s,但如果您出于其他原因需要,那么您可以ID为每个元素保留一个唯一的。click现在要为所有link具有该类的 s绑定一个处理程序language,您可以使用类似这样的东西

$(".language").on('click', function(e) {
    e.preventDefault();
    // Do whatever you want to do then update the click handler
    alert($(this).text() + ' is selected!');

    // Then update the click handler instead of removing it because
    // if you remove the click handler then next time yopu click the
    // link, it'll do it's default behavior, will be navigated away
    $(this).off('click').on('click', function(){ return false; });
});

此外,您可以为处理程序使用命名空间,click例如

$(".language").on('click.langualeSelection', function(e) {
    e.preventDefault();
    // Do it once
    alert($(this).text() + ' is selected!');

    // remove only this handler, other handler will prevent default
    // behavior but if there is no other handler, then update it like
    // previous example given above to stop loading the linked page
    $(this).off('click.langualeSelection');
});

另一个处理程序

$(".language").on('click', function(e) {
    e.preventDefault();
    alert('Another click handler for language class');
});

检查此示例以获取单击处理程序,并检查此示例以获取多个处理程序,但一个处理程序将off在它触发一次之后。

于 2013-11-11T17:19:25.207 回答