JavaScript仅触发一次

3

我是一名长期潜水者,在这里发表我的第一个公开问题,因为我真的卡住了。

我正在使用托管的购物车平台,因此我只能在特定的指定div中添加代码。我有一个JavaScript代码,我正在外部调用它(因为内联是不好的,除非你必须这样做,对吧?)

所以,我的问题是,有一个下拉列表时,我需要清除

,因此我有:

$("[name=ShippingSpeedChoice]").change(function(e) { $("#result_div").empty(); });

它只触发一次,但只有这样。我的问题是,如何使它在每次单击


3
你希望每次点击都能触发它,即使他们没有更改值?将其绑定到“click”事件而不是“change”事件。 - Barmar
1
你应该努力将问题中的代码减少到最少。此外,你还漏掉了HTML部分。 - j08691
你能否检查一下在第一次和第二次点击之间是否重新创建了选择元素...如果是的话,请看一下事件委托。 - Arun P Johny
我不确定这是否适合购物车的规范,如果选择没有改变,更新屏幕就没有多大意义。虽然他使用了“每次单击更改”的措辞,但我相信他可能想表达其他意思。 - Mike
1
还有,我想你是指这里的[5]吧? ;) FXONtransitdays[4] = "星期五"; FXONtransitdays[4] = "星期六"; - brandonscript
3个回答

1
如果您希望每次单击元素时都发生某些事情,请使用.click()而不是.change()。后者仅在从菜单中选择与之前不同的值时触发。
$("[name=ShippingSpeedChoice]").click(function(e) { $("#result_div").empty(); });

嗨Barmar,我已经尝试了.click.change两种方法 - 老实说,它是在.click还是.change上触发我并不在意,关键是它只能触发一次,并且每次更改或单击<select name = "ShippingSpeedChoice">时都需要触发。有什么想法吗? - KateTheGreat
你能创建一个 Fiddle 吗? - Barmar
我试图创建一个fiddle,但是由于托管购物车中有太多外部内容,它无法复制现实。最终我还是使用了父元素的id。感谢您的回复! - KateTheGreat

1

首先,我可能会尝试设置购物车选择器的ID。

$("[name=ShippingSpeedChoice]").id = 'shopping_cart_select';

然后尝试通过元素的id将“change”函数绑定到该元素。
$('#shopping_cart_select').bind('change', function(){
//rest of code goes here
}

0

我仍然无法使用name属性来调用函数,所以我通过使用tdid来绕过它,这个td包含了ShippingSpeedChoice下拉菜单:

    $("#DisplayShippingSpeedChoicesTD").change(function(e) {
        $("#result_div").empty();

现在它每次都能够触发。非常感谢您的反馈和协助 - 我仍然希望我能够弄清楚如何使用name属性而不是id,但那将是另一天的难题!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接