2012-04-16 105 views
0

我是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中不顯示任何錯誤。

回答

1

假設這是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

0

最好的解決方案是在選擇兩個單選按鈕之一時禁用自動完成功能。通過將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'); 
}); 
0

你應該檢查,如果你autocomplete()插件有一destroy某種消除他行爲的行爲。如果是這樣,只需選擇「自動完成關閉」收音機即可。

如果您的插件沒有該選項,只需創建文本字段即可。第一個附帶自動完成,第二個沒有它。然後根據您的複選框切換它們。

+0

我編輯我的問題,包括一些附加信息。 – 2012-04-16 07:45:03

0

鑑於與值單選按鈕「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