javascript - 突破 .on('click')
问题描述
我有一个带有下拉框的单选按钮:
<form>
<input type="radio" id="pan" class="radioButton" value="pan">
<label for="pan">PAN</label>
<input type="radio" id="singleColor" class="radioButton" value="singleColor">
<label for="singleColor">
<span>
<select name="imageColor" id="selectedColor">
<option value="red" selected="selected">Red</option>
<option value="red">Green</option>
<option value="red">Blue</option>
</select>
</span>
</label>
</form>
如果我单击下拉框而不选择单选按钮 - 没有任何反应,这是预期的。
如果我单击单选按钮,它会传递当前值,如果我通过单击单选按钮更改值,它会更新值。
从这个意义上说,一切正常,但是,如果我单击“平移”中的另一个单选按钮,然后从下拉列表中选择一种颜色,该颜色仍然会被传递,并且该颜色的图像会出现。
我不想要要从下拉列表中读取的颜色,除非选择了该单选按钮。任何人都知道从另一个函数中突破 .on('click') 的方法吗?
下面是一个 javascript 示例:
$('#singleColor).on('click',function() {
if($('selectedColor').val() === "red") {
//ajax code for red
}
if($('selectedColor').val() === "green") {
//ajax code for green
}
$('#selectedColor').change(function () {
if($('#selectedColor').val() === "red") {
//ajax code for red
}
if($('#selectedColor').val() === "green") {
//ajax code for green
}
}
}
所以本质上 - 当没有为此选择单选按钮时 - 但我使用下拉菜单它仍然可以访问您可以带入图像的下拉菜单。
它仅在您单击单选按钮时才获得访问权限,因此最初,如果您要刷新页面并单击下拉菜单,您将不会得到响应......
但是当您单击下拉菜单的单选按钮然后单击另一个单选按钮时按钮然后访问下拉菜单,您将始终得到响应。
对不起,如果这有点罗嗦..很难解释这个问题。
如果您需要更多信息,请告诉我。谢谢!
解决方案
当您单击#singleColor
收音机时,您将一个change
事件侦听器附加到另一个元素并保持在它上面。然后,是否单击单选按钮都没有关系,因为在下拉元素值更改时会执行其他事件侦听器。
正确的解决方案是仅将一次change
事件侦听器附加到下拉列表,然后检查是否选中(或不选中)#singleColor 单选。
$('#selectedColor').change(function () {
if (! $('#singleColor').is(':checked'))
return; // dont do anything if radio not checked
if ($(this).val() === "red") {
// ajax code for red
}
if ($(this).val() === "green") {
// ajax code for green
}
}
此外,如果您想在“无线电”检查中触发此事件和 ajax 函数,您只需在无线电事件trigger
中的下拉元素上使用函数:click
$('#singleColor').on('click' function () {
$('selectedColor').trigger('change');
});
推荐阅读
- javascript - 如何在 JavaScript 中删除嵌套的空对象?
- php - 是否可以使用 php 创建 css 规则?
- jenkins - 禁用服务器上的所有 jenkin crons
- visual-studio-code - 在虚拟文件系统上实现监视 - vscode.FileSystemWatcher 不起作用
- php - 如何从表单中获取价值并在 WordPress 的 functions.php 文件中对其进行处理?
- c# - 关于使用服务器资源管理器将 Visual Studio 连接到 mysql 和实现发布请求之间的应用差异的问题
- javascript - 在 jQuery.ajax() 中重写 fetch 函数
- amazon-web-services - AWS S3 创建一个策略以在继续放入同一对象时仅保留最新的 2 个对象
- sql - 在对它们进行一些操作后返回记录
- javascript - 使用下拉列表更改单独表格单元格中的多个值