2015-03-17 2 views
0

У меня есть флажок (#FBmngCH), который показывает набор переключателей (name=adManage) при нажатии. Если флажок снят, переключатель, который был выбран ранее, остается отмеченным. Я хочу, чтобы проверенный статус переключателя был удален после снятия флажка.Удалить «проверено» с радио при снятии флажка

Это используется в форме, поэтому, если пользователь передумает выбрать эту услугу, я хотел бы, чтобы информация об этой услуге также была протерта (так что значение выбранного радио не будет входить в PHP и, в конечном счете, по электронной почте). Я надеюсь в этом есть смысл.

Я дал это довольно много времени, и я не уверен, что это правильно работает. Последний набор if-операторов является частью кода, который я написал. Не уверен, что я что-то упускаю, выбирая что-то неправильно или что. Любая помощь в этом будет высоко оценена. Благодаря!

HTML

<li> 
    <input type="checkbox" class="cbox" name="FBchecks[]" value="Facebook Ad MGMT" id="FBmngCH"> 
    <label for="test">Facebook Ad Management</label> 
    <ul id="FBmngList"> 
     <li> 
      <input type="radio" name="adManage" value="Ad Management 1" id="adMan1"> 
      <label for="adMan1">Ad Fund - 1</label> 
     </li> 
     <li> 
      <input type="radio" name="adManage" value="Ad Management 2" id="adMan2"> 
      <label for="adMan2">Ad Fund - 2</label> 
     </li> 
     <li> 
      <input type="radio" name="adManage" value="Ad Management 3" id="adMan3"> 
      <label for="adMan3">Ad Fund - 3</label> 
     </li> 
     <li> 
      <input type="radio" name="adManage" value="Ad Management 4" id="adMan4"> 
      <label for="adMan4">Ad Fund - 4</label> 
     </li> 
     <div id="FBADerror" class="acctError"></div> 
    </ul> 
</li> 

JS

$FBmngCH = $("#FBmngCH"); 
$FBmngList = $("#FBmngList"); 

//hide FB Management List 
$FBmngList.hide(); 

//on FB Management select 
$FBmngCH.click(function() { 
    //toggle FB Management List 
    $FBmngList.toggle(); 
}); 

$FBadValid = false; 
$FBADerror = $("#FBADerror"); 

//if FB Ad Management is checked 
if ($FBmngCH.attr('checked')) function validateFB() { 
    $("input[name=adManage]").each(function() { //LoopingthroughradioButtons 
    // "this" is the current element(radio) in the loop 
     if ($(this).is(':checked')) { 
      $FBadValid = true; //Radio Button is Checked); 
     } 

     if ($FBadValid.attr = true) { 
      $FBADerror.empty(); 
     } 
    }); 
}; 
if ($FBmngCH.blur($FBadValid.attr = false)) { 
    $FBADerror.append("<li> Please select a Facebook Ad plan. </li>"); 
    //appends error to document 
} 
if ($FBmngCH.blur($FBmngCH.not('checked'))) { 
    $("input[name=adManage]").each(function() { 
     if ($(this).is(':checked')) { 
      $("input[name=adManage]").removeAttr('checked'); 
     } 
    }); 
    //remove checks from radios 
}; 
$("input[name=adManage]").click(validateFB); 

ответ

1

Может быть, я не понимание ваших потребностей, но вы не можете просто проверить это в процедуре события и снять пометку кнопку проверил радио:

$FBmngCH.click(function() { 
    //toggle FB Management List 
    $FBmngList.toggle(); 
    if (!$FBmngList.attr('checked')) { 
     $FBmngList.find('input:checked').attr('checked', false); 
    } 
}); 

См. this Fiddle.

+0

Это хорошо работало! Спасибо! – BPmkt

0

У вас есть несколько ошибок в коде:

if ($FBmngCH.blur($FBadValid.attr = false)) { 

Это не правильный синтаксис. Оно должно быть:

$FBmngCH.blur(function(){ 
    if ($FBadValid === false) { 

    } 
}); 

В принципе, так как вы как раз переключая радиоприемники всего раздел и готовы удалить их :checked свойства без проверки каких-либо условий, вам не нужно для петель или if($(this).is(':checked')) отчетности. Просто удалите :checked со всех радиостанций. Вы также можете показать сообщение об ошибке при каждом щелчке по кнопке без условий if, потому что вся секция в любом случае скрыта.

Вы должны закончить с очень коротким кодом, например:

$FBmngCH = $("#FBmngCH"); 
$FBmngList = $("#FBmngList").hide(); 
$FBADerror = $("#FBADerror"); 

$FBmngCH.click(function() { 
    // no need for loops and if's there. Radios and the message are hidden. 
    $FBmngList.toggle(); 
    $FBADerror.html("<li> Please select a Facebook Ad plan. </li>"); 
    $("input[name=adManage]").prop('checked', false); 
}); 

$("input[name=adManage]").click(function(){ 
    // no need for loops there. Radios and the message are hidden. 
    // Also, no need for if($(this).is(':checked')){. Since it's a click handler, something has to be :checked on radio click. 
    $FBADerror.empty(); 
}); 

DEMO

Смежные вопросы