JQuery:trigger()没有调用相关的目标

时间:2015-06-02 06:27:45

标签: javascript jquery html onclick radio

我在加载所有页面内容后使用trigger()检查单选按钮,因为单选按钮值来自第三方api。

我默认选中了一个选项。所以我使用trigger()事件来检查单选按钮。单选按钮也有它的点击事件。

在我的代码中,只有单选按钮被选中但事件未触发。 我的代码是......

jQuery(document).ready(function($) {
    jQuery("#btn_03").attr('checked', 'checked');

    jQuery("#btn_03").trigger("change");

    jQuery(".class input[type='radio']").live("change", function($) {
        alert("clicked");
    });
});

3 个答案:

答案 0 :(得分:5)

您需要在触发事件之前分配事件处理程序。

当您实际触发事件时,您仍然没有为该事件附加任何侦听器。你是在下一行做的。因此事件change确实被触发但事件没有发生。

你可以这样做

jQuery(document).ready(function($) {
    jQuery("#btn_03").attr('checked', 'checked');

    jQuery(".class input[type='radio']").on("change", function($) {
        alert("clicked");
    });

    jQuery("#btn_03").trigger("change");
});

根据最新的jQuery文档

,也可以使用“on”绑定事件而不是“live”

答案 1 :(得分:3)

您需要在附加事件处理程序后触发事件

jQuery(".class input[type='radio']").on("change", function(e) {
    alert("clicked");
});

jQuery("#btn_03").prop('checked', true).trigger("change");

同时使用$.fn.on而不是很久以前弃用$.fn.live。最好设置checked属性而不是属性。

答案 2 :(得分:2)

您需要在实际调用change事件之前挂钩change事件。我已经包含了您要求的功能的小提琴。

我已经将更改事件目标更改为实际的无线电输入,因为我没有你的html,但通常你很可能想要使用无线电组的名称来挂钩事件,因为这些通常与单一行为相结合 - 如$("input[name='radioName']").change(function(){ // Change event code });

旁注:您可以使用' $'而不是' jQuery'开始表达。

http://jsfiddle.net/du58fo3t/

$(document).ready(function() {

  $("#btn_03").attr('checked', true); // Check radio button

  // Hook change event on radio button
  $("#btn_03").change(function() {
    alert("clicked");
  });

  // Trigger change on radio button
  $("#btn_03").trigger("change");
});