缓存事件的变量而不使其全局化
Caching variables for events without making them global
可以说这适用于大多数事件,但在我的情况下,选择框的change
事件。我有两个选择框。我想根据选择框中的选项插入/重新插入,具体取决于在第一个选择框中选择的选项。我已经设法做到了这一点,但需要注意的是,为我想要操纵的选项创建一个全局变量。有没有办法在事件中做到这一点,或者在变量不是全局的情况下有某种变通方法?
HTML
<select id="vehicles">
<option value="motorcycle">Motorcycle</option>
<option value="bicycle">Bicycle</option>
<option value="unicycle">Unicycle</option>
</select>
<select id="speeds">
<option class="remove" value="four">Four Speed</option>
<option class="remove" value="three">Three Speed</option>
<option class="remove" value="two">Two Speed</option>
<option value="one">One Speed</option>
</select>
JS
$(function() {
var options = $(".remove");
$("#vehicles").on("change", function() {
if ($("option:selected").attr("value") == "unicycle") {
options.detach();
} else {
$("#speeds").append(options)
}
});
});
JSFiddle
为什么不试试这样的东西:
$(function() {
$("#vehicles").on("change", function() {
if ($("option:selected").attr("value") == "unicycle") {
$("#speeds option.remove").hide();
} else {
$("#speeds option").show();
}
});
});
我不确定这是否是你想要的。
尝试
$(function() {
$("#vehicles")
.data("clone", $(".remove").clone()) // `.remove` clone
.on("change", function(e) {
if ($(e.target).val() === "unicycle") {
$("option[class=" + $(this).data("clone")[0].className + "]")
.detach();
} else {
// append `.remove` `clone`,
// if `#speeds` does not contain `.remove` `class`,
// to prevent duplicate `.remove` collections being appended
if (!$("#speeds *").hasClass("remove")) {
$("#speeds").append($(this).data("clone"))
}
}
});
});
jsfiddlehttp://jsfiddle.net/cc03xcx5/7/
相关文章:
- 主干视图触发全局事件
- 通过进程使用 NodeJS 全局事件是个好主意吗?
- 关于性能,最好的方法是什么:setInterval()或body上的全局事件
- 通知全局事件组件的最佳方式
- FRP、角度和全局事件处理程序
- XML 声明中的 NativeScript 全局事件处理程序
- 访问Firefox中的全局事件对象
- 在单个全局事件处理程序中捕获所有单击事件是否是一个坏主意
- 独特的主干事件总线,也可以共享全局事件
- Dropzone JS全局事件
- 创建一个require js插件,监听骨干js全局事件
- Node.js请求模块全局事件
- Angular中的全局事件处理程序
- 如何在EaselJS中触发和监听全局事件
- jQuery全局事件监听器
- Jquery触发自定义全局事件
- 如何在使用requireJS时监听全局事件
- 在React.js中,我如何设置一个简单的全局事件系统来在组件之间进行通信?
- AngularJS:在指令中绑定到全局事件的最佳方法是什么
- 在jQuery 1.9上触发全局事件