Jquery代码不会从页脚加载,而是从控制台运行

时间:2016-04-15 10:35:34

标签: javascript jquery wordpress

我正在尝试获取值并将其传递给隐藏输入,以便通过$_POST发送表单数据。我有一个下拉按钮和以下代码,以便在用户选择选项时更新值:

jQuery(document).ready(function($) {
    var espSeleccionada = $('button[data-id="select-especialidad"]');
    espSeleccionada.on("click", function() {
        var x = $(this).text();
        $('#boton-prueba').text(x);
    });
});

代码应该将值从一个按钮传递到另一个按钮,如此处的示例所示,但是,当我从WordPress页眉/页脚/主题加载代码时,没有任何反应。相反,当我在控制台上写它时它工作正常。控制台中没有JS错误。

请注意,我正在使用.text()来测试代码是否有效,但在上线之前会有.val()

这是按钮HTML:

<button type="button" class="btn dropdown-toggle btn-default" data-toggle="dropdown" data-id="select-especialidad" title="Hacienda" aria-expanded="false"><span class="filter-option pull-left">Hacienda</span></button>

以下是一个示例:https://fiddle.jshell.net/t9mvoxj5/

编辑包含完整的代码:

( function( $ ) {
    var num_cols = 3,
    container = $('#menu-preparadores-de-oposiciones-en'),
    listItem = 'li',
    listClass = 'sub-list';
    container.each(function() {
        var items_per_col = new Array(),
        items = $(this).find(listItem),
        min_items_per_col = Math.floor(items.length / num_cols),
        difference = items.length - (min_items_per_col * num_cols);
        for (var i = 0; i < num_cols; i++) {
            if (i < difference) {
                items_per_col[i] = min_items_per_col + 1;
            } else {
                items_per_col[i] = min_items_per_col;
            }
        }
        for (var i = 0; i < num_cols; i++) {
            $(this).append($('<ul ></ul>').addClass(listClass));
            for (var j = 0; j < items_per_col[i]; j++) {
                var pointer = 0;
                for (var k = 0; k < i; k++) {
                    pointer += items_per_col[k];
                }
                $(this).find('.' + listClass).last().append(items[j + pointer]);
            }
        }
    });

    if ($("body").hasClass("page-id-64")) {
      $('.tab-content').addClass('col-sm-9');
      $('#custom-tabs-0').tabCollapse();
    }

} ) ( jQuery );

jQuery(document).ready(function($) { 
    var espSeleccionada = $('button[data-id="select-especialidad"]');
    espSeleccionada.on("click", function() {
        var x = $(this).text();
        $('#boton-prueba').text(x);
    });
});

1 个答案:

答案 0 :(得分:0)

嗯,代码很好,问题是bootstrap-select正在使用目标button[data-id="select-especialidad"],即使我的代码之前加载了bootstrap-select,也需要几秒钟(或至少一点点) )处理信息。

因此代码应该在检查事件已加载的函数之后被包装。这是最终的代码:

$('#select-especialidad').on('loaded.bs.select', function (e) {
    var y = $(this).val();
    $('#select-especialidad-hidden').val(y);

    var espSeleccionada = $('button[data-id="select-especialidad"] > span.filter-option.pull-left');
        espSeleccionada.on("click", function() {
            var x = $(this).text();
            $('#select-especialidad-hidden').val(x);
        });
});

loaded.bs.select有关bootstrap-select事件的更多信息。