【问题标题】:jQuery update doesnt work but javascript doesjQuery 更新不起作用,但 javascript 可以
【发布时间】:2013-11-16 07:33:17
【问题描述】:

我一直在尝试不同的方法来让我的页面在我选择另一个输入值时更新一个输入值。当我使用 javascript 尝试一种方式时,它可以正常工作,而通过 jQuery 的另一种方式则不行,老实说,我不明白为什么,有人能指出我缺少什么吗?

这个 Javascript 工作正常:-

function youPickedThis(id, num){
    var objID = "any[" + num + "].id"
    document.getElementById(objID).value = id
}

但是这个 jQuery 没有:-

function youPickedThis(id, num){
    var objID = "any[" + num + "].id"       
    $("#"+objID).val(id);
}

正在使用/引用上的对象都是在页面加载期间通过 AJAX 调用等加载的,这与导致问题的原因有关吗?

感谢您的任何指点,如果有人有任何好的链接来阅读更好地解释这些东西,我将非常感激! :)

也试过了,但还是没有骰子...

$(document).ready(function(){

                function updateHiddenInput(id, num){
                    var objID = "any[" + num + "].id";
                    $("#"+objID).val(id);
                }

            });     

【问题讨论】:

  • 只是好奇。你在使用 $(document).ready() 吗?
  • 为什么不用分号?
  • @Taicho - 我还没有把这个函数放到一个准备好的文档中,这会有什么不同吗?
  • 你一定要试一试。
  • 它们在 javascript 中当然不是必须的,但使用它们来保持一致性很好

标签: javascript jquery setvalue


【解决方案1】:

jQuery 选择器和document.getElementById 之间存在区别。第二个做的更少,所以它知道你给它的任何东西都会被视为id。例如:

var objID = "any[" + num + "].id"       
$("#"+objID).val(id);

这会寻找什么?假设num1,比如说:

$('#any[1].id').val(id);

这会查找具有id#any、属性1 和类id 的元素,因为字符[]. 在选择器中都有特殊含义。为了演示这一点,请在浏览器控制台中运行以下代码行:

$('<div id="any" class="id" 1="foo"/>').is('#any[1].id') // returns true

进行这种选择的最好方法是使用document.getElementById 进行选择,然后将其包装在 jQuery 构造函数中:

$(document.getElementById(objID)).val(id);

可能使用\\ 转义特殊字符,但它变得越来越笨拙且难以(a)写入和(b)读取。

【讨论】:

  • 在一分钟内完成了 3 个正确答案,所以我必须选择最完整的答案,但非常感谢大家花时间帮助我理解!一个真正的灯泡时刻! :)
【解决方案2】:

你有这个:

function youPickedThis(id, num){
    var objID = "any[" + num + "].id"       
    $("#"+objID).val(id);
}

这会导致 objID 具有类似 any[3].id 的值,因此您的 jQuery 看起来像这样:$("#any[3].id").val(id); jQuery 将 .id 解释为一个类。像这样逃脱它:

function youPickedThis(id, num){
    var objID = "any\\[" + num + "\\]\\.id"       
    $("#"+objID).val(id);
}

【讨论】:

    【解决方案3】:

    你应该转义方括号和点

      var objID = "any\\[" + num + "\\]\\.id";
    

    使用任何元字符(例如 !"#$%&'()*+,./:;?@[]^`{|}~ )作为 a 的文字部分名称,必须使用两个反斜杠进行转义:\。例​​如,id="foo.bar" 的元素可以使用选择器 $("#foo\.bar")。

    参考

    http://forum.jquery.com/topic/jquery-jquery-wont-recognise-attribute-names-containing-square-brackets#14737000000283511

    【讨论】:

      【解决方案4】:

      正如其他人所提到的,jQuery 选择器和document.getElementById 之间存在差异。由于 jQuery 选择器必须解析字符串,并且像 [,] 这样的字符具有特殊含义,而 document.getElementById 将所有这些都视为 id 的一部分。您可以尝试转义其他人提到的那些特殊字符。这里我给出另一种解决方案。

      你可以试试 id 属性选择器。它的作用类似于document.getElementById

      function youPickedThis(id, num){
          var objID = "'any[" + num + "].id'"       
          $("[id="+objID+"]").val(id);
      }
      

      DEMO

      【讨论】:

      • 您需要在objID 之后关闭]
      猜你喜欢
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多