我有一个select
和一个checkbox
,我想串联工作。select
有四个选项,值为 null、Yes、No 和 Maybe。
当select
为 Yes 或 Maybe 时,应检查checkbox
。
当checkbox
被取消选中时,select
应设置回 null,.text()
设置为空字符串。
一切似乎工作,除了我失去了文本的选项在select
当我取消选中checkbox
。当我检查选项时,选择的.text()
为空,选择的.prop("null")
设置为“是”,现在为空。
这个片段显示了正在发生的事情。
$(function() {
$("#test-1").blur(function() {
if($("#test-1").val() == "Yes" || $("#test-1").val() == "Maybe" ) {
$("#result").html("<p>The SELECT is 'YES' and the CHECKBOX is checked. This is intended.<br>Now uncheck CHECKBOX<p>");
$("#test-2").prop("checked", true);
} else {
$("#result").html("<p>The SELECT is 'NO' and the CHECKBOX is unchecked<br>Now SELECT 'YES'<p>");
//$("#test-1").text("");
$("#test-1").prop("null");
$("#test-2").prop("checked", false);
}
});
});
$(function() {
$("#test-2").click(function() {
if($(this).is(":checked")) {
$("#result").html("Hello World 3")
$("#test-1 option:selected").text("Yes");
$("#test-1 option:selected").prop("Yes");
} else {
$("#result").html("<p>The CHECKBOX is unchecked and the SELECT is empty, but some SELECT options are missing. Check SELECT.<p>")
$("#test-1 option:selected").text("");
$("#test-1 option:selected").prop("null");
}
});
});
.test {
display: flex;
flex-direction: column;
width: 50%;
line-height: 22px;
}
#test-2 {
border: 12px solid red;
padding-left: 25px;
}
#result {
margin-top: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Select <span style="font-weight:600;color:red">YES</span>. Click outside to lose focus.</p>
<div class="test">
<div>
Test 1:
<select id="test-1" name="test-1">
<option selected value="null"></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
<option value="Maybe">Maybe</option>
</select>
</div>
<div>
<br>Test 2:
<input id="test-2" type="checkbox" name="test-2">
</div>
</div>
<div id="result">{results appear here}</div>
1条答案
按热度按时间5lwkijsr1#
这是因为对jQuery方法的一些不必要和有害的调用。
它们获取select/selected option元素的名为“null”的属性,这实际上什么也不做:
字符串
...而这些更改当前选定选项元素的文本。第二个就是我们要找的罪犯
型
也就是说,你可以按如下方式修复你的代码:
型
此外,在这种情况下,不需要具有两个
$(function() { /* ... */ })
。要么使用一个,要么完全跳过它。试试看: