My jquery isn't getting a value back with val() when the selector is working [closed]

Posted

技术标签:

【中文标题】My jquery isn\'t getting a value back with val() when the selector is working [closed]【英文标题】:My jquery isn't getting a value back with val() when the selector is working [closed]My jquery isn't getting a value back with val() when the selector is working [closed] 【发布时间】:2021-01-02 10:24:55 【问题描述】:

我正在尝试在 wordpress 上的自定义程序中创建一个函数来显示某些字段,但是当我的 JS 文件中的所有内容似乎都正确对齐时,我总是返回未定义。

function cta() 
        //Selector for the entire radio area that "should return" the value (either "one" or "two")
        var ctaOptions = $("input[name='_customize-radio-cta-type']");

        //The ID selector for option one to check if this field is "checked"
        var ctaOne  = $('#_customize-input-cta-type-radio-one');

        //The ID selector for option Two to check if this field is "checked"
        var ctaTwo = $('#_customize-input-cta-type-radio-two');

        //This console log always returns undefined, but returns the element without the .val()
        console.log(ctaOptions.val());

        //This always returns false even when I can see in the inspector this element is checked="checked"
        console.log(ctaTwo.is(':checked'));

        if(ctaOne.is(':checked')) 
            $('#customize-control-button-two-label').addClass('hidden');
        
        else if(ctaTwo.is(':checked')) 
            $('#customize-control-button-two-label').removeClass('hidden');
        
    

我正在为我的 wordpress 主题使用 unscores 样板,但不确定这是否与 javascript 中的冲突有关。我还使用检查器确认了 ID 是正确的,只是由于某种原因它在尝试获取或检查值时会中断。

这是我所指区域的 html

<li id="customize-control-cta-type" class="customize-control customize-control-radio" style="display: list-item;">
   <span class="customize-control-title">Call To Action buttons on banner</span>
   <div class="customize-control-notifications-container" style="display: none;"> 
     <ul></ul>
   </div>
   <span id="_customize-description-cta-type" class="description customize- 
    control-description">How many buttons do you want?
   </span>
                
   <span class="customize-inside-control-row">
    <input id="_customize-input-cta-type-radio-one" type="radio" aria- 
     describedby="_customize-description-cta-type" value="one" name="_customize- 
     radio-cta-type" data-customize-setting-link="cta-type">
    <label for="_customize-input-cta-type-radio-one">one</label>
   </span>
   <span class="customize-inside-control-row">
    <input id="_customize-input-cta-type-radio-two" type="radio" aria- 
     describedby="_customize-description-cta-type" value="two" name="_customize- 
     radio-cta-type" data-customize-setting-link="cta-type" checked="checked">
    <label for="_customize-input-cta-type-radio-two">two</label>
   </span>
</li>

【问题讨论】:

This console log always returns undefined, but returns the element without the .val() 你确定是这样吗?即使没有找到任何元素,jQuery 选择器也总是返回一个对象。尝试检查console.log(ctaOptions.length) 以查看是否实际找到任何元素。如果输出为0,则您的问题是无效的选择器。如果没有 HTML 示例来重现问题,我们真的无能为力 您能否edit 您的问题包括该应用到的 HTML 部分?正如 Rory 所说,当我们看不到你拥有的东西时,为什么它找不到元素,我们真的无能为力:) 我只有你的回复。你是对的。我的长度为 0。我会解决这个选择器问题。 还有两个收音机。使用 val() 只会给出集合中第一个的值。您没有考虑检查哪一项 如果换行符确实在 HTML 属性值中,那就是你的问题。删除它们 【参考方案1】:

尝试在您当前的 js 函数周围设置一个 setTimeout(function(),这可能是您的 js 脚本在 php 实际填充输入之前加载。

$( document ).ready( function () 
setTimeout( function () 

//Your function goes here...

, 1);
 );

编辑 1:关于您的最后评论。如果输入值打算从用户输入中获取,那么您应该添加一个事件侦听器。像这样...

$('#_customize-input-cta-type-radio-two, input[name="_customize-radio-cta-type"], #_customize-input-cta-type-radio-two').change(function()

);

【讨论】:

这是一个非常丑陋的 hack。有更好的方法来管理动态插入的元素 这是有道理的。我试图从函数中删除代码,它应该只在页面刷新时加载。每次我单击单选按钮时,它都会刷新页面。这很可能意味着 PHP 在 JS 之后加载。 嘿@charlietfl,这是真的,这是一个丑陋的黑客,大部分时间都有效。这主要是为了调试,如果它最终正常工作,那么我们就知道问题出在哪里,我们可以采取行动。 嘿@davidb3rn 你需要让脚本在点击和页面加载时运行,你的问题可能来自于此。您目前仅在页面加载时运行脚本,而不是在事件时运行。 关于您的最后评论,请参阅编辑 1【参考方案2】:

我得出的结论是,我的问题不在于 javascript,而在于选择器的根源。我仍然无法修复它,但我的问题无法回答,因为它不是问题所在。感谢您的反馈。

编辑 1: 发现问题!根本不是我的 JS 有问题。这是我带入上一个文件的方式。我需要将一个 JavaScript 文件加入到 customize_controls_enqueue_scripts 的队列中。当我把我的脚本添加到一个新的 JS 文件中并将下面的代码放入我的 customize.php 中时

function theme_slug_customizer_controls() 
    wp_enqueue_script( 'theme-customizer-controls', get_template_directory_uri() . '/js/customize-controls.js', array( 'jquery' ), '20170412', true );

add_action( 'customize_controls_enqueue_scripts', 'theme_customizer_controls' );

【讨论】:

祝你好运! 谢谢,感谢您的帮助!

以上是关于My jquery isn't getting a value back with val() when the selector is working [closed]的主要内容,如果未能解决你的问题,请参考以下文章

jquery map调用get()方法的困惑

ElasticSearch 的索引统计信息及索引设置

jquery如何获取子标签的IDŀ

Jquery ajax提交表单几种方法详解

10分钟-jQuery-基础选择器

python requests函数封装方法