打开和关闭jQuery功能

问题描述:

我是jQuery的新手,并且在处理某些问题时遇到了一些麻烦。打开和关闭jQuery功能

我有这个功能,被称为在页面底部附加自动完成功能的文本框,这部分工作正常。这里是被称为启用自动完成代码:

$(function(){ 
    $('#intext').autocomplete('get-data.php?mode=sql', { 
     width: 400, 
     max: 5, 
     selectFirst: false 
    }); 
}); 

但是在搜索框中包含了两种不同类型的搜索两个单选按钮。自动完成功能只能用于一种搜索类型。

所以我的问题是,我怎么能通过点击一个单选按钮来启用它,并通过单击第二个单选按钮来禁用它?

编辑

自动完成脚本有一个.autocomplete(“禁止”)的方法,但我不知道如何启用/禁用基于哪个单选按钮被选中的。

EDIT 2

我想获得由“罗里McCrossan”建议的工作方法,因为我使用jQuery UI自动完成。下面是我的单选按钮和搜索框代码:

News: <input type="radio" class="myRadio" name="search_type" value="news" checked="checked" onclick="this.form.action='/search.php';" /> 
Media Gallery: <input type="radio" class="myRadio" name="search_type" value="media" onclick="this.form.action='/media.php';" /> 
<input id="intext" class="txt" type="text" name="searchterms" /> 

我在每一页上运行脚本下面的代码都:

addAutoComplete($("#intext")); 

$(".myRadio").change(function() { 
    if ($(this).val() == "news") { 
     if (!$("#intext").hasClass("ui-autocomplete-input")) 
      addAutoComplete($("#intext")); 
    } 
    else { 
     $("#intext").autocomplete('destroy') 
    } 
}); 


function addAutoComplete($el) { 
    $('#intext').autocomplete('autocomplete-data.php?mode=sql', { 
     width: 400, 
     max: 5, 
     selectFirst: false 
    }); 

} 

这似乎并没有工作,和错误控制台在Firefox中不显示任何错误。

假设这是jQueryUI自动完成,您可以使用$el.autocomplete("destroy")删除自动完成功能。

addAutoComplete($("#intext")); // on load 

$(".myRadio").change(function() { 
    if ($(this).val() == "a") { 
     if (!$("#intext").hasClass("ui-autocomplete-input")) 
      addAutoComplete($("#intext")); 
    } 
    else { 
     $("#intext").autocomplete('destroy') 
    } 
}); 

function addAutoComplete($el) { 
    $el.autocomplete('get-data.php?mode=sql', { 
     width: 400, 
     max: 5, 
     selectFirst: false 
    }); 
} 
+0

通过“#myRadio”并不意味着这两个单选按钮都需要相同的ID?我也试图编写验证代码,并且元素不能具有相同的ID。我也是jQuery的新手,所以如果我的理解不正确,请随时介入并纠正我。 – 2012-04-16 07:48:32

+0

这是一个'.',它是一个类选择器。 – 2012-04-16 07:49:09

+0

对不起,当我看着它时,有几个不同的东西混在一起。我会试试看看它是如何发展的。 – 2012-04-16 07:49:58

最好的解决方案是在选择两个单选按钮之一时禁用自动完成功能。通过将methodname作为jQuery插件调用的第一个参数来调用jQuery UI方法。因此,例如:”

// First create the autocomplete 
$('#textbox1').autocomplete(); 

// call a method on the 'autocompleted' textbox 
$('#textbox1').autocomplete('methodname', 'methodparam1', methodparam2, etc) 

因此,在这种情况下:

$('.classOfTheTwoRadioButtons').change(function(e) { 
    var method = $(e.target).is(':checked [value=valueIfAutocomplete]')? 'enable': 'disable'; 
    $('#textbox').autocomplete(method); 
}); 

其他选项:具有相同名称创建两个文本框和只重视对他们的一个自动完成使用jQuery的toggle()功能。隐藏你不想看的时候所选择的单选按钮被选中的人。

$('.classOfTheTwoRadioButtons').change(function(e) { 
    var $e = $(e.target); 
    $('#firstTextBox').toggle($e.val() === 'value1'); 
    $('#secondTextBox').toggle($e.val() === 'value2'); 
}); 

你应该检查,如果你autocomplete()插件有一destroy某种消除他行为的行为。如果是这样,只需选择“自动完成关闭”收音机即可。

如果您的插件没有该选项,只需创建文本字段即可。第一个附带自动完成,第二个没有它。然后根据您的复选框切换它们。

+0

我编辑我的问题,包括一些附加信息。 – 2012-04-16 07:45:03

鉴于与值单选按钮“A”使得能够自动完成和一个具有值“B”禁用它

$(".myRadio[value='a']").click(function() { 
    $('#intext').autocomplete('enable'); 
} 
$(".myRadio[value='b']").click(function() { 
    $('#intext').autocomplete('disable'); 
} 
+0

我将您发布的代码中的值更改为我的表单中使用的实际值,但单击第二个单选按钮不会禁用自动完成。 – 2012-04-16 08:11:52

+0

我尝试在脚本中添加一些警报来尝试它,并且当单击单选按钮时,函数根本不会被调用。 – 2012-04-16 08:18:34

+0

@SherwinFlight sry回复晚了,查看编辑过的帖子 – 2012-04-16 09:56:44