【问题标题】:Element value not showing up in console when set via jQuery通过 jQuery 设置时,元素值未显示在控制台中
【发布时间】:2016-01-08 15:28:39
【问题描述】:

我对此有点困惑。

为什么控制台中#edit的value属性没有变化?

我错过了什么吗?

<div class="editor">
    <form>
        <input id="edit" value="" type="text">
        <input id="key" value="" type="hidden">
        <input value="Save" type="submit">
    </form>
</div>

<ul>
    <li> <span class="cursor" id="__optin-1">Value 1</span> </li>
    <li> <span class="cursor" id="__optin-2">Value 2</span> </li>
    <li> <span class="cursor" id="__optin-3">Value 3</span> </li>
</ul>

<script type="text/javascript">

    $( "*", document.body ).click(function( event ) {

        event.stopPropagation();

        var edit    = $('#edit');
        var key     = $('#key');

        var id      = this.id;
        var content = this.html();

        if ( id.substring(0,2) == "__") {

            console.log(this.id);
            console.log(content);

            edit.val(content);
            key.val(id);
        }

    });

</script>

更新...

经过与@charlietfl 的许多无关的讨论,我发现了一个明显的差异,正如这里所介绍的https://jsfiddle.net/n4pe07j6/1/

【问题讨论】:

  • 当你在 jQuery 中有 $(this) 时,为什么要使用这个引用?
  • 因为使用原生 DOM this 比使用 jQuery 的 $(this) 及其方法更便宜,而且在很多情况下更简单。
  • move 重要的是为什么会有全局点击事件。?无论有人点击哪里,您都希望这种情况发生吗?你声明 id 然后在日志中使用 this.id 为什么?示例中的“this”也很不清楚....也就是说,这不取决于您单击的内容还是document.body。
  • @Seabizkit - 因为我必须确定单击时单击了哪个元素,它可以位于文档中的任何位置,并且不必遵循任何特定模式。你有更好的建议吗?
  • 这段代码的目的是什么?会抛出很多错误,因为并非所有元素都有 id 并且许多元素没有 innerHTML。将一个处理程序绑定到document 并使用事件目标也会更有意义

标签: javascript jquery dom console


【解决方案1】:

如果您只想以__ 开头的ID 为目标,那么为DOM 中的每个元素添加一个点击处理程序真的很昂贵。

将单个委托点击处理程序与以这些元素为目标的选择器一起使用。

 $(document).on('click', '[id^="__"]', function(e){

     $('#edit').val($(this).html());
     $('#key').val(this.id)

});

编辑:输入的属性值不是表单提交的相关值。表单控件的 value 属性 和该元素的 value 属性 是有区别的。它是被提交的值属性

DEMO

【讨论】:

  • 您知道为什么控制台中#edit 的 value 属性没有改变吗?
  • 创建一个复制它的演示。没有理由不应该
  • 这是小提琴.. jsfiddle.net/n4pe07j6 如果您检查元素,您会看到 ID 为 #edit 的元素的 value 属性没有改变。我想知道为什么?
  • 属性与属性不同。您永远不会在 html 中看到更新的输入值属性,属性已更新
  • 所以隐藏的元素值被认为是一个属性?
【解决方案2】:

甚至这个。

<form>
        <input id="edit" value="" type="text">
        <input id="key" value="" type="hidden">
        <input value="Save" type="submit">
    </form>
</div>

<ul>
    <li> <span class="cursor" id="__optin-1">Value 1</span> </li>
    <li> <span class="cursor" id="__optin-2">Value 2</span> </li>
    <li> <span class="cursor" id="__optin-3">Value 3</span> </li>
</ul>

    $('.cursor').click(function( event ) {
        $('#edit').val($(this).html());
        $('#key').val($(this).attr('id'));
    });

【讨论】:

【解决方案3】:

答案是:“var content = this.html();”无效。 javascript 元素上没有 .html(),.html() 来自 JQuery 库,因此它必须是 JQuery 元素,因此,“var content = $(this).html();”让它工作。我认为这就是你从所有其他 cmets 那里得到的结果。

【讨论】:

  • 您在此处的元素检查器中看到了什么jsfiddle.net/n4pe07j6 是我还是表单中一个元素上的值被更新但另一个元素上没有更新
  • 我相信这就是你所追求的:Uncaught TypeError: this.html is not a function
  • 在给定的小提琴中??
  • 希望小提琴是更新和更正的代码......我在回答为什么你的代码在问题中不起作用。这是您在 charlietfi 提供答案并且其他人也回答并试图帮助您之后提出的问题。
  • 感谢您的所有见解。这是更新后的小提琴jsfiddle.net/n4pe07j6/1
【解决方案4】:

有很多更好的方法来写这个,但是你刚刚开始为什么不做类似的事情。

<script type="text/javascript">

    function changeValue(elem){
        var $elem = $(elem);
        var id      = $elem.attr("id");
        var content = $elem.html();
        $('#edit').val(content);
        $('#key').val(id);
    }
</script>

<div class="editor">
    <form>
        <input id="edit" value="" type="text">
        <input id="key" value="" type="hidden">
        <input value="Save" type="submit">
    </form>
</div>

<ul>
    <li> <span class="cursor" id="__optin-1" onclick="changeValue(this)">Value 1</span> </li>
    <li> <span class="cursor" id="__optin-2" onclick="changeValue(this)">Value 2</span> </li>
    <li> <span class="cursor" id="__optin-3" onclick="changeValue(this)">Value 3</span> </li>
</ul>

【讨论】:

  • 我没有将任何内容绑定到 html 的选项 - onclick="changeValue(this)" ...我必须确定单击哪个元素时单击它,它可以位于文档,不必遵循任何特定模式
  • 什么意思?您不允许在 html 中使用 on-click 吗?这是业务需求吗?从编码的角度来看,你绝对可以......你是什么意思绑定......你调用一个javascript函数。
  • 为什么还要使用内联脚本?这是 2015 年,而不是 1999 年
  • 我问了一个关于 jQuery 的问题,该问题与控制台中显示的值有关。我正在做的事情真的是无关紧要的事情。简而言之,我有一个动态的情况,我无法开始将 JavaScript 硬编码到 HTML 模板中。我需要做的事情必须依赖于对任何给定文档的检测,并且必须能够适应不可预见的情况。我在这里发布的是我正在考虑的几种方法的一小部分。感谢您从自己独特的角度研究此问题,但当我问您是否有我提到的关于点击检测的建议时。
  • @charlietfl 让我们不要去那里......但同意了。
【解决方案5】:

只需将 'this' 关键字替换为 $(this) 和用户 .attr('id') 而不是 .id 即可。

【讨论】:

  • 嗯..控制台中的value属性仍然没有变化
猜你喜欢
  • 2022-12-11
  • 2012-11-13
  • 2014-09-18
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多