如果调用preventDefault(),则无法以编程方式选择单选按钮

时间:2015-04-16 07:22:31

标签: javascript jquery radio-button preventdefault

我在Chrome中有一个'抓22'。如果绑定到同一事件的任何其他函数调用click,我无法以编程方式选择preventDefault()事件中的单选按钮。

例如,我有一个单选按钮,其父元素绑定到click事件,其中preventDefault()被调用。如果直接单击单选按钮,则不会选中它。这是可以预料的。但是,我实际上需要选择单选按钮,因此在代码中我尝试在绑定到click事件的另一个函数中检查它:$(this).prop('checked', true);

奇怪的是,这不起作用,我无法删除对preventDefault()的调用或禁用传播,因为它是我需要运行的第三方代码。

这是一个错误吗?任何建议的解决方法?

这是一个例子: http://jsfiddle.net/LnLuk4st/

UPDATE:

我试过@RGraham的建议。 他的例子清楚地起作用,但奇怪的是它在我的代码的上下文中不起作用。 @ RGraham的代码有一个语法错误,使其看起来有效。

以下是一些背景信息:

// Remember kendo tab
$(".k-tabstrip").each(function () {
    var $tabStrip = $(this);
    var $tabs = $tabStrip.find(".k-tabstrip-items .k-item");
    var tabCookie = "Current_Tab_" + $tabStrip.attr("id");

    // On tab change, set cookie
    $tabs.click(function () {
        createCookie(tabCookie, $(this).attr("aria-controls"), 1);
        $tabStrip.parent().css({ 'min-height': $tabStrip.parent().height() });


        if ($(this).is('input')) { // Doesn't eval to true, 'this' is always a '.k-item'.
            $(this).prop("checked", true);
        } else {
            // Never works if the input is clicked directly
            $(this).find('input').prop("checked", true);
        }


    });

    // @RGraham's suggestion...
    $tabs.on('click', 'input', function() {
        $(this).prop("checked", true); // Line reached but doesn't work either :(
    });

    // If cookie set, select tab
    var tab = readCookie(tabCookie);

    if (tab) {
        $tabs.each(function () {
            if ($(this).attr("aria-controls") == tab) {
                $(this).click();
            }
        });
    }
});

1 个答案:

答案 0 :(得分:0)

我仍然认为这种行为是个错误,但我找到了解决方法。

直接捕获单选按钮,阻止传播,然后以编程方式单击单选按钮的父级。这允许第三方代码在不将preventDefault应用于单选按钮的情况下运行。

    // preventDefault bug fix.
    $tabs.find("input").click(function (e) {
        e.stopPropagation();
        $(this).parent().click();
    });