使用javascript编写对按钮按下事件而不是更改事件的响应

使用javascript编写对按钮按下事件而不是更改事件的响应,javascript,jquery,button,events,Javascript,Jquery,Button,Events,我希望大家能够理解。我已经在这方面工作了大约两周了,我只是在挖一个更大的洞 以下(相当标准的代码)从mysql查询中重新填充一个选择选项对象(id=brand),该对象的参数是“brand”的值,在选择前面的选项之一时在“fetch.php”中调用: $('#brand').change(function(){ $.getJSON( 'fetch.php', 'brand='+$('#brand').val(), function(resu

我希望大家能够理解。我已经在这方面工作了大约两周了,我只是在挖一个更大的洞

以下(相当标准的代码)从mysql查询中重新填充一个选择选项对象(id=brand),该对象的参数是“brand”的值,在选择前面的选项之一时在“fetch.php”中调用:

$('#brand').change(function(){
    $.getJSON(
        'fetch.php',
        'brand='+$('#brand').val(),
        function(result){
            $('#brand').empty();
            $.each(result.result, function(){
                $('#brand').append('<option>'+this['brand']+'</option>');
            });
        }
    );
});
$(“#品牌”).change(函数(){
$.getJSON(
'fetch.php',
'brand='+$('#brand').val(),
功能(结果){
$('品牌').empty();
$.each(result.result,function(){
$('#brand')。附加(''+此['brand']+'');
});
}
);
});
但是,我还希望index.html上有一个按钮,它也可以做同样的事情,除了我希望使用网页上文本对象(id=demo)的值,而不是使用“brand”的值作为查询的参数


我的问题是如何构造上面的代码,在单击按钮后调用“fetch.php”,并使用demo的值,以便重建选择对象“brand”。

最直接的解决方案是克隆现有代码并对其进行必要的修改(单击按钮收听,使用其他字段的值)

$(“#品牌”).change(函数(){
$.getJSON(
'fetch.php',
'brand='+$('#brand').val(),
功能(结果){
$('品牌').empty();
$.each(result.result,function(){
$('#brand')。附加(''+此['brand']+'');
});
}
);
});
$(“#按钮”)。单击(函数(){
$.getJSON(
'fetch.php',
'brand='+$('#demo').val(),
功能(结果){
$('品牌').empty();
$.each(result.result,function(){
$('#brand')。附加(''+此['brand']+'');
});
}
);
});
相反,您可以提取两个代码块的公共部分以使其可重用:

// The common part.
function fetchBrands(brand) {
    $.getJSON(
        'fetch.php',
        'brand='+brand,
        function(result){
            $('#brand').empty();
            $.each(result.result, function(){
                $('#brand').append('<option>'+this['brand']+'</option>');
            });
        }
    );
}

// Listen for change event on the select element.
$('#brand').change(function(){
    fetchBrands($('#brand').val());
});

// Listen for click event on the button.
$('#button').click(function(){
    fetchBrands($('#demo').val());
});

//公共部分。
功能品牌(品牌){
$.getJSON(
'fetch.php',
“品牌=”+品牌,
功能(结果){
$('品牌').empty();
$.each(result.result,function(){
$('#brand')。附加(''+此['brand']+'');
});
}
);
}
//侦听select元素上的更改事件。
$(“#品牌”)。更改(功能(){
fetchBrands($('#brand').val());
});
//侦听按钮上的单击事件。
$(“#按钮”)。单击(函数(){
fetchBrands($('#demo').val());
});
您可以使用和使用
外部参数(它们在文档中有说明)。
它们将作为参数传递给该事件的已注册事件处理程序

事件
对象始终作为第一个参数传递给事件 参数数组也可以传递给
.trigger()
调用,这些参数也将传递给处理程序 在
事件之后
对象。从jQuery 1.6.2开始,单个字符串或 可以传递数值参数,而无需将其包装在数组中

请注意此处传递的额外参数与
eventData
参数添加到
.on()
方法。两者都是 将信息传递给事件处理程序,但
.trigger()
的参数允许在此时确定信息 事件被触发,而
.on()
eventData
参数需要 处理程序运行时要计算的信息 束缚

事件处理程序的签名修改为:

function(ev, brand) {
  // ...
}
使用更改处理程序中的
品牌
参数(如果可用),或者使用下拉列表的选定值(否则):

brand = brand || $('#brand').val();
然后将其用于
.getJSON()
调用:

$.getJSON(
  'fetch.php',
  'brand=' + encodeURIComponent(brand),
  ...)
然后,您可以使用您想要的任何品牌(例如,
$(“#demo”).text()
)触发事件处理程序,方法是:

一个工作示例(使用假
getJSON()
方法)

$(函数(){
$(“#品牌”)。更改(功能(电动汽车,品牌){
品牌=品牌| |$(“#品牌”).val();
getJSON(品牌、功能(结果){
$('品牌').empty()
.附加(“”);
$.each(结果,函数(){
$('#brand')。附加(''+此['brand']+'');
});
});
});
//“重置为默认值”按钮
$(“按钮”)。在(“单击”,函数(){
$(“#brand”).triggerHandler(“更改”,$(“#演示”).text();
});
//最初填写下拉列表(我不想在标记中也写默认选项…)
$(“#brand”).triggerHandler(“更改”,$(“#演示”).text();
});
函数getJSON(品牌,回调){
常数fakeResponse={
A:[{品牌:“AA”},{品牌:“AB”}],
B:[{品牌:“BA”},{品牌:“BB”}],
默认值:[{品牌:“A”},{品牌:“B”}]
}
回调(伪造响应[品牌]);
}

违约

重置为“默认值”
这是一个怎样的php问题?你所发布的内容一个也没有。回答得非常快。我现在就试试。我正在做第二个选项,提取两个代码块的公共部分,除了测试它之外,我只使用了“select元素上的Listen for change事件”,但我现在没有得到select对象的更新。我已经加入了在$(“#按钮”后面插入了一个“document.getElementById('marker')。innerHTML='GOT HERE')行;以查看代码是否达到了目标,但它没有。是否缺少括号或其他内容?我认为这3行listen for change事件有点不对劲…是“brand=”+brand之后的分号,而不是逗号!现在工作正常!fetchBrands($(“#demo”).val());被视为“未声明”。“demo对象”在index.html中声明为:

books

我假设fetchBrands($(“#demo”).val()对于选择选项是可以的,但对于stri则不可以
$.getJSON(
  'fetch.php',
  'brand=' + encodeURIComponent(brand),
  ...)
$("#brand").triggerHandler("change", $("#demo").text())