【问题标题】:Trigger AJAX with jquery click event使用 jquery click 事件触发 AJAX
【发布时间】:2010-10-21 11:00:53
【问题描述】:

我有两个下拉菜单,其中一个我正在尝试使用 jquery 替换为单选按钮。每当用户在第一个下拉菜单中进行选择时,第二个框都会通过 AJAX 更新,并带有新选项。我已经成功生成了更改第一个下拉菜单值的单选按钮,但是当用户使用单选按钮更新第一个下拉菜单时,它不再影响第二个下拉框中的值。我对 AJAX 或 JS 不是很好,当用户选择一个单选按钮时,我不知道如何触发 AJAX 加载。

我提前为代码墙道歉,我不确定什么是重要的,所以我包含了所有似乎相关的内容。如果您想查看相关页面,可以查看here.

我用来生成单选按钮的代码如下所示:

 $(function(){
    $("#options-1 option").each(function(i, e) {
        $("<input type='radio' name='r' />")
        .attr("value", $(this).val())
        .attr("checked", i == 0)
        .click(function () {
            $("#options-1").val($(this).val());
        })
        .appendTo("#r");
       $("#options-1").change(function(){
       $("input[name='r'][value='"+this.value+"']").attr("checked","checked");
});
});
});

$("#options-1").change(function(){
    $("input[name='r'][value='"+this.value+"']").attr("checked","checked");
});

下拉列表的 HTML 如下所示:

<form action="http://example.com/dev3/?page_id=5" method="post" class="shopp product validate">
<div id="r"></div>

<ul class="variations">
<li> 
<label for="options-1">Framing</label> 
<select name="products[1][options][]" class="category-catalog product1 options" id="options-1"><option value="1">Print Only (Unframed)</option> 
<option value="2">Professionally Framed</option> 
</select><li> 
<label for="options-2">Size</label> 
<select name="products[1][options][]" class="category-catalog product1 options" id="options-2"><option value="3">12 x 8</option> 
<option value="4">24 x 36</option> 
</select></li> 

</ul>

<p><input type="hidden" name="products[1][product]" value="1" /><input type="hidden" name="products[1][category]" value="catalog" /><input type="hidden" name="cart" value="add" /><input type="submit" name="addtocart"  value="Add to Cart" class="addtocart" /></p>

</form>

AJAX 如下所示:

<script type='text/javascript' src='http://example.com/dev3?sjsl=colorbox,shopp,catalog,cart&amp;c=1&amp;ver=98239bb061a58639408323699680ad0e'></script> 
<script type='text/javascript'> 
/* <![CDATA[ */
var ShoppSettings = {
    ajaxurl: "http://example.com/dev3/wp-admin/admin-ajax.php",
    cp: "1",
    c: "$",
    p: "2",
    t: " ",
    d: ".",
    g: "3",
    nocache: "",
    opdef: ""
};
    var pricetags = {};
jQuery(window).ready(function(){ var $ = jqnc(); 
        pricetags[1] = {};
    pricetags[1]['pricing'] = {"18770":{"p":10,"i":false,"s":false,"t":"Shipped"},"25785":{"p":21,"i":true,"s":"1","t":"Shipped"},"23510":{"p":20,"i":false,"s":false,"t":"Shipped"}};
    pricetags[1]['menu'] = new ProductOptionsMenus('select.category-catalog.product1.options',true,pricetags[1]['pricing'],0);

});
/* ]]> */
</script> 

【问题讨论】:

  • 在将新元素添加到 DOM 之后, 我倾向于将更多成功的事件处理程序绑定到新元素。
  • 好的,我移动了绑定事件处理程序,还有其他建议吗?你知道更新事件是如何被触发的吗?

标签: javascript jquery html ajax


【解决方案1】:

通过js改变Combo Box的值时,不会触发onChange函数,也不会触发onClick等。

您必须使用与使用 Combo 1 更​​新 Combo 2 相同的代码,其中使用 Radio 更新 Combo 1。

我建议将该代码放在另一个函数中,并从两个位置调用该函数。

希望对你有帮助。

【讨论】:

  • 是的,我想我按照你的说法,我最大的问题是我没有创建 AJAX 脚本,我不确定它是如何更新的。我查看了代码,除了我为单选按钮创建的处理程序之外,似乎没有任何 onEvent 处理程序。知道 ajax 是如何被触发的吗?
  • 是的,代码根本不清楚,如果你能提供更多关于你正在使用的信息,你如何填写组合框?如果你要切换的选项都在html里面,那甚至不是ajax,那是纯客户端,html加js……而且你不能直接用Radio列表代替转换combo吗?跨度>
  • 它是一个商业插件,我无法修改。作为记录,它是一个名为 Shopp 的 wordpress 电子商务插件。因此,我无法替换 HTML。它可能不是 AJAX 的东西——我只是假设它是因为它在下拉列表中引入了新信息而无需重新加载页面。你可以在这里看到正在运行的脚本:designvillain.com/dev3/?page_id=4&shopp_pid=1 下拉菜单的选项是从数据库中提取的(我假设),它们是通过 CMS(wordpress)插入的。老实说,我不确定它是如何工作的——这有点赶时间,我还没有机会研究它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
相关资源
最近更新 更多