2012-03-09 70 views
2

我有一個問題,防止重複輸入,我生成的單選按鈕同時使用2個頁面,同時使用一個按鈕,我從用戶的標籤,並從該標籤生成一個單選按鈕,我想爲了防止用戶進入2個相同的標籤,這裏是其中的2頁的任何幫助將不勝感激如何防止javascript中的重複條目?

function createRadioElement(elem, label, checked) { 
var id = 'option1_' + label; 
$('#after').append($('<input />', { 
    'type': 'radio', 
    'fieldset':'group', 
    'name': 'option1', 
    'id': id, 
    'data-role': 'controlgroup', 
    'data-theme':'b', 
    'value': '1'})); 
$('#after').append('<label for="' + id + '">'+ label + '</label>').trigger('create');} 

function createRadioFortSecondPage(elem, label, checked) { 
var id = 'option1_' + label; 
$('#Inserthere').append($('<input />', { 
    'type': 'radio', 
    'fieldset':'group', 
    'name': 'option1', 
    'id': id, 
    'data-role': 'controlgroup', 
    'data-theme':'b', 
    'value': '1'})); 
$('#Inserthere').append('<label for="' + id + '">'+ label + '</label>').trigger('create');} 

是這樣的功能我寫,以防止重複產生無線電腳本:

function checkDublicates(){ 
    var isExist=true; 
    var x = document.getElementById('option').value; 
    var labels = []; 
$('#after input[type=radio]').each(function() { 
    labels.push($('label[for='+$(this).attr('id')+']').text()); 


    }); 
    for(var i=0;i<labels.length;i++){ 

    if(x==labels[i]) 
    { 
     isExist=false;} 
     else{ 
     isExist=true;} 
     } 
    return isExist;} 

,這就是按鈕動作:

$('#AddButton').click(function(){ 
    var exist=checkDublicates(); 
    <!--var isEmpty=validate();--> 
    <!--if(exist==true){ 
     <!--alert("Duplicates Are Not Allowed!"); 
     <!--}else{ 
    var y=document.getElementById('question').value 
    document.getElementById('headTitle').innerHTML=y; 
    if(exist==false){ 
     alert("Duplicates Not Allowed!") 
    }else{ 
    createRadioElement(this,$('#option').val(),true); 
    createRadioFortSecondPage(this,$('#option').val(),true); 
    } 

    }); 
+1

您可以使用'$ .inArray(val,arr)'檢查重複項。 – elclanrs 2012-03-09 02:03:53

回答

2

只要使用$.inArray(val, arr)它會工作! http://api.jquery.com/jQuery.inArray/

但只是對您的代碼的評論。

替換

document.getElementById('question').value 

通過

$('#question').val() 

document.getElementById('headTitle').innerHTML=y 

通過

$('#headTitle').html(y) 

會更清潔;-)

+0

爲什麼要用jQuery對象創建和函數調用來替換乾淨的屬性訪問?前者就像「乾淨」,比第二個快得多。 – RobG 2012-03-09 02:25:11

+2

爲什麼在這種情況下使用jQuery?因爲它在眼睛上更容易打字,而且更容易打字,這比你想象的更重要。 – 2012-03-09 02:27:54

+0

更快?你在客戶端贏得了微不足道的微妙時間,但是你在很大程度上失去了它們的下載時間(更多的文本加載)!女巫對我來說更重要!是的,就像艾略特說的那樣,對眼睛更容易理解和更好。否則,你會像我在jQuery存在之前那樣做,我創建了一個函數'function getId(var that){return document.getElementById(that).value; }下載的重量要輕得多 – user1040899 2012-03-09 05:48:24

1

您可以使用這個方便的功能將元素推入數組並同時檢查重複項。如果捕獲重複,它將返回true

var noDupPush = function (value, arr) { 

    var isDup = false; 

    if (!~$.inArray(value, arr)) { 
     arr.push(value); 
    } else { 
     isDup = true; 
    } 

    return isDup; 

}; 

// You can use it like this 

var arr = ['green']; 
if (noDupPush('green', arr)){ 
    // Dup exists 
} 
// Or else it will just push new value to array 
1

您可以生成一個包含標籤文本的標識,然後很快檢查包含該文本的元素是否存在。例如:

function generateLabelId(userinput){ 
    return 'awesomelabel_' + userinput.replace(/\W/g,''); 
} 

var label = document.getElementById(generateLabelId(userinput)); 
var labelDoesNotExist = (label == undefined); 

if (labelDoesNotExist){ 
    // create your element here 
    // making sure that you add the id from generateLabelId 
}