问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于jquery中使用.val(),取不到值。为什么啊!

发布网友 发布时间:2022-04-29 04:22

我来回答

8个回答

懂视网 时间:2022-04-22 19:39

本篇文章给大家带来的内容是关于jquery中val函数重载的实现方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

所谓重载,就是一组相同的函数名,有不同个数的参数,在使用时调用一个函数名,传入不同参数,根据你的参数个数,来决定使用不同的函数!但是我们知道js中是没有重载的,因为后定义的函数会覆盖前面的同名函数,但是我们又想实现函数重载该怎么办呢?

第一种方法:

这种方法比较简单,给一个思路,大家肯定都能理解,就是函数内部用switch语句,根据传入参数的个数调用不同的case语句,从而功能上达到重载的效果。

这种方法简单粗暴

第二种方法:

function method(obj,name,fnc){
  var old = obj[name];
  console.log(old instanceof Function);
  obj[name] = function(){
  console.log(arguments.length+" "+fnc.length);
  if(arguments.length === fnc.length){
   return fnc.apply(this,arguments);
  }else if(typeof old === "function"){
   return old.apply(this,arguments);
  }
  }
 }
 var people = {
  values:["Zhang san","Li si"]
 };
 method(people,"find",function(){
  console.log("无参数");
  return this.values;
 })
 method(people,"find",function(firstname){
  console.log("一个参数");
  var ret = [];
  for(var i = 0;i < this.values.length;i++){
  if(this.values[i].indexOf(firstname) === 0){
   ret.push(this.values[i])
  }
  }
  return ret;
 })
 method(people,"find",function(firstname,lastname){
  console.log("两个参数");
  var ret = [];
  for(var i = 0;i < this.values.length;i++){
  if(this.values[i] == firstname + " " + lastname){
   ret.push(this.values[i])
  }
  }
  return ret;
 })
 console.log(people.find());
 console.log(people.find("Zhang"));

实现过程:我们看一下上面这段代码,最重要的是method方法的定义:这个方法中最重要的一点就是这个old,这个old真的很巧妙。它的作用相当于一个指针,指向上一次被调用的method函数,这样说可能有点不太懂,我们根据代码来说,js的解析顺序从上到下为。

  1.解析method(先不管里面的东西)

  2.method(people,"find",function() 执行这句的时候,它就回去执行上面定义的方法,然后此时old的值为空,因为你还没有定义过这个函数,所以它此时是undefined,然后继续执行,这是我们才定义 obj[name] = function(),然后js解析的时候发现返回了fnc函数,更重要的是fnc函数里面还调用了method里面的变量,这不就是闭包了,因为fnc函数的实现是在调用时候才会去实现,所以js就想,这我执行完也不能删除啊,要不外面那个用啥,就留着吧先(此处用call函数改变了fnc函数内部的this指向)

  3.好了第一次method的使用结束了,开始了第二句,method(people,"find",function(firstname) 然后这次使用的时候,又要执行old = obj[name]此时的old是什么,是函数了,因为上一条语句定义过了,而且没有删除,那我这次的old实际上指向的是上次定义的方法,它起的作用好像一个指针,指向了上一次定义的 obj[name]。然后继续往下解析,又是闭包,还得留着。

  4.第三此的method调用开始了,同理old指向的是上次定义的 obj[name] 同样也还是闭包,还得留着。

  5.到这里,内存中实际上有三个 obj[name],因为三次method的内存都没有删除,这是不是实现了三个函数共存,同时还可以用old将它们联系起来是不是很巧妙

  6.我们 people.find() 的时候,就会最先调用最后一次调用method时定义的function,如果参数个数相同 也就是 arguments.length === fnc.length 那么就执行就好了,也不用找别的函数了,如果不相同的话,那就得用到old了 return old.apply(this,arguments); old指向的是上次method调用时定义的函数,所以我们就去上一次的找,如果找到了,继续执行 arguments.length === fnc.length 如果找不到,再次调用old 继续向上找,只要你定义过,肯定能找到的,对吧!

  总结:运用闭包的原理使三个函数共存于内存中,old相当于一个指针,指向上一次定义的function,每次调用的时候,决定是否需要寻找。

后续:说完上面的再对比下面的理解,会更深入的理解原型与原型链

var array=[]
addMethod(array,'sub0',function(){
 return 0;
})
addMethod(array,'sub0',function(prefix){
 console.log("prefix===>",prefix);
 return prefix[0];
})
array.sub0([1,2,3,5]) //这里是array对象拥有了sub0这样的方法,而不是Array,addMethod是继承

// 区别于方法直接作用于原型上
//例子 String的 startsWith 实现
function addstartsWithToString(){
 if (typeof String.prototype.startsWith1 != 'function' ) {
 String.prototype.startsWith1 = function(subString){
 return this.slice(0,subString.length)==subString
 }
 }
}

addstartsWithToString();
'120000'.startsWith1('1')

热心网友 时间:2022-04-22 16:47

这里使用.val()是取不到数据的,必须换成.text()。

所以顾名思义:val()方法 一般使用在input属性中,要获取值的话,必须有value属性。也可以通过val("xx") 通过xx设置值。

在jquery中给表单取值或赋值的方法我们只要简单的$(\'表单ID\').val()即可实现取值了,如果赋值可使用$(\'表单ID\').val(\'内容\')即可实现了。

扩展资料

jQuery中使用text()、html()、val()方法对Html元素赋值和取值

在jQuery中,使用选择器可以非常容易的得到任何一个Html元素,在Html页面上,分表单元素和非表单元素:而对于jQuery封装的text()方法,其主要功能就是给Html页面上的非表单元素赋值和取值操作。

text()方法是jQuery的方法,使用该方法操作的元素必须是使用jQuery选择器查找到的,如果使用JavaScript查找到的元素,则是不能使用text()方法操作的。使用div1.text()获取div元素的值,使用div1.text(“新值”)给div元素赋值。

注意事项:

使用text()不能获取表单元素的值,如文本框的值。jQuery的text()方法相当于JavaScript的innerText属性。

热心网友 时间:2022-04-22 18:05

jquery中使用.val(),取不到值,是设置错误造成的,解决方法如下:

1、首先新建一个HTML文档,指定<input>元素的ID,如下图所示。

2、然后编写JS脚本,根据ID选择元素,如下图所示。

3、接着使用.val()方法获取被选元素的value值。

4、以弹窗形式显示获取的input值。

5、最后保存文件,在浏览器查看结果,就完成了。

热心网友 时间:2022-04-22 19:40

1.你需要检查代码的逻辑,这个地方是不是本来就应该是一个空值.
2.如果你有用到前端的插件,你可以检查一下是否你的input被渲染成了其它的标签,比如span. 如果是这类标签的话,你用val是肯定取不到值得

热心网友 时间:2022-04-22 21:31

我的也是,F12浏览器都看到那里有值,.val()就是取不出来,总是null
我的好了,我用.attr('value')取到值了,我也不明白为啥。

热心网友 时间:2022-04-22 23:39

看看页面中 var account=$("#<%=administrators.getAccount()%>").val(); 是什么值。 那个是后台的代码,页面中肯定不同的。追问debug调试了,页面中的值和数据库中的是一样的。

热心网友 时间:2022-04-23 02:04

加我企鹅1030757391

热心网友 时间:2022-04-23 04:45

换个id 也许就行了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中堡村村民公约 中港镇中港镇各村情况简介 中堡溪村人口卫生 中堡溪村村情概况 小时代3刺金时代是电影还是电视剧 江苏一氧化二氮气体厂家 原神悬浮小岛怎么上去 原神天衡山天空城上去方法 原神天空城怎么开 天空城进入方法及位置攻略 手机怎么看相册的原图 如何查看微信中图片的原图? 四季都分别涂什么颜色的口红? 绿色橘色黄色搭在一起好看吗 用jquery如何获取text()、html()和val(),最好是举个例子 什么水果含维生素B2和维生素c多 手机麦克风没有声音怎么回事 唇彩用什么样的? 新民主主义革命总路线的基本内容? 为什么avi导入视频转换器就显示是黑屏只有声音了.? WIN10闪退怎么办 求大牛指导 jquery获取的节点中 val(),innerHTML()用于获取属性 但我... 格式工厂转化为mp4时为何前几秒黑屏?但是声音正常? 军绿色橄榄绿墨绿色的衣服如何搭配妆容?眼影,唇膏,腮红,甲油等用什么颜色比较搭? 为什么我转换mp4格式视频会有黑屏的时候 jquery中(&quot;#id&quot;).val()和(&quot;#id&quot;).html()区别,各自在什么情况下使用_百 ... 新民主主义革命的总路和基本纲领是什么?? 如何在华硕飞行堡垒fx51上安装固态硬盘? 咸菜扣肉的做法 用格式工厂转换成swf播放时黑屏怎么回事 如何认识新民主主义革命的总路线 求助,拆华硕飞行堡垒,不会拆了 详谈jQuery中使用attr(), prop(), val()获取value的异同 有关jquery中val() ,text(),html()的问题,看了一些boss写的文章后自己... 吃什么蔬菜,水果有含维生素A、B、C? 荣耀畅玩9a怎么双清 你好华为荣耀9刷过机以后在双清还会有账户锁呢今天刚刷过机我来家双清一下还是有账户锁 QQ空间的手机名字怎么改 84消毒液沾在衣服上,用什么方法能洗掉 华为g9plus怎么双清 在《计算机工程与设计》期刊上发表文章要求有什么具体要求? 计算机工程与设计好中吗 计算机工程与设计让修改还会拒稿吗 计算机工程与设计的介绍 在word中,如何将黑底白字改成白底黑字?- 问一问 计算机工程就业方向与前景 计算机工程与设计是不是北大核心期刊 “计算机工程与设计”是不是08中文核心期刊? 在书上经常看到说用CED来制图,“CED”是什么意思呀,是一个软件名称的缩写还是什么来的? 《计算机工程与设计》这个期刊怎么样,要评职称,不知道核心期刊里面够不够档次 计算机工程与设计可以给编辑发邮件询问审稿状况吗 计算机工程与计算机应用哪个好中