2016-06-12 35 views
0

我在使用下列具有使用attr一個問題:Jquery的ATTR不工作的需要,但會爲標題

$("input[name='choice']").change(function() { 
if($('#opt_2').is(':checked')) { 
    $('#email').attr('required', true); 
    $('#reasonreport').attr('required', true); 
} else { 
    $('#email').removeAttr('required'); 
    $('#reasonreport').removeAttr('required'); 
} 
if($('#ch7').is(':checked')) { 
    $('#reasonreport').attr('required', true); 
} else { 
    $('#reasonreport').removeAttr('required'); 
} 

});

電子郵件是電子郵件輸入字段

resonreport是一個文本輸入

當opt_2從單選框選中它改變了電子郵件領域需要但reasonreport的textarea不會改變所需。以下工作正常:

$('#reasonreport').attr('title', 'something'); 

將增加一個冠軍,但它只是慣於設置所需要的ATTR,我一直都現在着抓我的頭一段時間的生活我工作的原因。

任何幫助,非常感謝。謝謝!

+0

它們是什麼類型的元素? (HTML會有很大的幫助,[mcve]會更有幫助。) –

+0

#email是一個電子郵件輸入,#reportingreason是一個textarea輸入。對不起,現在編輯將現在編輯 – Adam

回答

1

從根本上說,你在做什麼應該工作,因爲布爾屬性當它們出現在所有(不管值)時是「真」,當它們不存在時是「假」。但是,jQuery的attr(仍然)模糊了屬性和屬性之間的界限,並且在嘗試處理屬性時不是正確的選擇:使用proptrue啓用,並且false禁用該屬性。這也讓您顯着簡化代碼:

$("input[name='choice']").change(function() { 
    $('#email, #reasonreport').prop('required', $('#opt_2').is(':checked')); 
    $('#reasonreport').prop('required', $('#ch7').is(':checked')); 
}); 

...但要注意,你也有一個邏輯錯誤:您是根據opt_2checked狀態設置的#reasonreportrequired屬性,但是這樣覆蓋基於ch7checked狀態。你可以完全刪除代碼#reasonreportrequiredopt_2的東西;它最終無所事事。

如果你的目標是要求#reasonreport如果opt_2ch7檢查,則需要修改代碼。

$("input[name='choice']").change(function() { 
    var opt_2_checked = $('#opt_2').is(':checked'); 
    var ch7_checked = $('#ch7').is(':checked'); 
    $('#email').prop('required', opt_2_checked); 
    $('#reasonreport').prop('required', opt_2_checked && ch7_checked); 
}); 

或者使用||代替&&如果我們的目標是要求它,如果他們中的任何檢查。

+0

我曾嘗試使用.prop,但仍然是同樣的事情,電子郵件輸入工作正常,並添加所需的attr,但textarea仍然無法正常工作 – Adam

+0

@Adam:我注意到後點擊發布,你有一個邏輯錯誤,我已更新解決。 –

+0

超級巨星謝謝你,我甚至沒有看到覆蓋。謝謝! – Adam

相關問題