【发布时间】:2016-09-10 15:28:09
【问题描述】:
我试图了解如何使用 javascript 处理一些事件,特别是如果触发了特定事件,则当前函数会调用另一个函数。在 onLoad 时,javascript 创建第一个从第一个对象中选择数据。然后,如果我选择值为“Iphone”的声音,则调用另一个函数来创建具有某些价格的第二个菜单。我的主要问题是我的解决方案看起来很丑陋,而且当我在按钮上单击多次时,它每次都会创建相同的第二次选择。
//global objects
var product = [
{name: "Samsung"},
{name: "Iphone"},
{name: "Alcatel"},
{name: "Sony"}
]
var productPrice = [
{name: "Samsung", price: 190},
{name: "Iphone", price: 290},
{name: "Alcatel", price: 65},
{name: "Sony", price: 330}
]
var main = function() {
var sel = $('<select>').appendTo('#select-1');
$(product).each(function() {
sel.append($("<option>").attr('value', this.name).text(this.name));
});
$('.press').click(function() {
if ($("#select-1 option:selected").text() == "Iphone") {
handleEvent();
}
if ($("#select-1 option:selected").text() != "Iphone") {
$("#risposta").remove();
}
});
}
function handleEvent() {
var sel = $('<select>').appendTo('#select-2');
$(productPrice).each(function() {
sel.append($("<option>").attr('value', this.name).text(this.price));
});
}
$(document).ready(function() {
main();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="select-1">
</div>
<div id="select-2">
</div>
<button class="press">Click</button>
有什么建议吗?
【问题讨论】:
-
它创建另一个元素的原因是
handleEvent()函数正在创建一个元素。 -
并继续@JericCruz 的观点,您基本上有两个选择:1)始终在附加之前删除列表 2)切换可见性(例如 css 类)而不是附加
-
@Jeric Cruz 我知道,因为我声明的函数在每次第二次选择时都会创建。我已经想象过类似这段代码来处理这个事件,但它似乎不值得。如何更好地组织我的功能以避免这些事件问题?我的意思是只调用一次创建第二个选择的函数,当然当我点击其他选择值时删除它。
-
$("#select-1 option:selected")可能需要是$("#select-1").find("select option:selected") -
这样的? jsfiddle.net/qu9zs2h1 ,只需确保尚未创建选择,只需使用类或 id 以确保尚未附加它
标签: javascript jquery object