2012-03-09 3 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

ответ

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

+2

Зачем использовать jQuery вообще в этом случае? Потому что это проще на глазах и легче набирать, что важнее, чем вы думаете. –

+0

Быстрее? вы выигрываете несколько незначительных микросекунд на стороне клиента, но вы в значительной степени теряете их по времени загрузки (больше загружаемого текста)! Ведьма для меня важнее! и да, как Эллиот сказал, что легче понять и лучше для глаз. В противном случае вы делаете, как я делал до того, как существовал jQuery, я создал функцию 'function getId (var this) {return document.getElementById (that) .value; } 'намного легче для загрузки – user1040899

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 
} 
Смежные вопросы