文本框值 returns 奇怪的代码而不是里面的内容

Textbox value returns weird code instead of what's inside of it

当我想向现有文本框添加笑脸时,我发现了一些问题。代码

 $cnt=$("#comContent").val
 
 $("#addSmiley").click(function() {
  console.log($cnt);
  $cnt = $cnt + ":)";
  console.log($cnt);
 });
#comContent {
 width: 100%;
 height: 120px;
 border: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet">

<textarea id="comContent" cols="70" rows="20"></textarea>
<i style="margin-left: 10px;overflow:visible;cursor:pointer;" id="addSmiley" class="em em-smiley"></i>

基本上我想做的是,在用户单击笑脸图标后,代码应将“:)”添加到文本框。我添加了 console.log 以查看它为什么不添加任何内容。然后我看到了这个:

function (a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(gb,""):null==c?"":c)}}:)

我以为这将是一个简单的代码,但我不知道它有什么问题,为什么它不起作用

$cnt=$("#comContent").val();
 
 $("#addSmiley").click(function() {
  console.log($cnt);
  $cnt = $cnt + ":)";
  console.log($cnt);
 });
#comContent {
 width: 100%;
 height: 120px;
 border: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet">

<textarea id="comContent" cols="70" rows="20"></textarea>
<i style="margin-left: 10px;overflow:visible;cursor:pointer;" id="addSmiley" class="em em-smiley"></i>

为您的 .val 添加括号。像 $cnt=$("#comContent").val();

问题

  • 您得到的只是函数的引用 val
$("#comContent").val // This line gets the implementation of function `val`

解决方案

  • 你真正想要的是那个函数的执行,所以你需要这样调用它:$("#comContent").val()

看这段代码:

$cnt = $("#comContent").val();

$("#addSmiley").click(function() {
  console.log($cnt);
  $cnt = $cnt + ":)";
  console.log($cnt);
});
#comContent {
  width: 100%;
  height: 120px;
  border: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet">

<textarea id="comContent" cols="70" rows="20"></textarea>
<i style="margin-left: 10px;overflow:visible;cursor:pointer;" id="addSmiley" class="em em-smiley"></i>

看,现在您正在调用函数 val 并获得预期值。