我正在使用jquery作为输入占位符的跨浏览器解决方案,但我不明白如何为$(this)
设置全局变量,以便我可以在这两部分函数的第二部分中使用它。我首先获取输入的值并将其存储为$value
但我需要在第二个函数中再次使用它来用它替换空值。我该怎么做呢?我应该提到的一点是,这需要适用于一种形式的多个文本输入。
$(document).ready( function() {
$('input[type=text]')
.on('focus', function(){
var $this = $(this);
var $value = $(this).val();
globalVar = $value;
if($this.val() == $value){
$this.val('');
}
})
.on('blur', function(){
var $this = $(this);
if($this.val() == ''){
$this.val($value);
}
});
});
答案 0 :(得分:4)
您可以使用这两个函数范围之外的变量..但最好使用data
作为存储位置:
$(document).ready( function() {
$('input[type=text]')
.on('focus', function(){
var $this = $(this);
if ($this.val()) {
$this.data('myval', $this.val());
}
$this.val('');
})
.on('blur', function(){
var $this = $(this);
if($this.val() == ''){
$this.val($this.data('myval'));
}
});
});
补充说:
if ($this.val()) {
$this.data('myval', $this.val());
}
答案 1 :(得分:2)
您必须使用所谓的闭包在两个函数之外声明$value
。这样,在ready
的同一调用中创建的两个函数之间共享$ value。 (备注:由于ready
很可能只被调用一次,你也可以使用全局变量。但是,这可能会污染全局命名空间,所以我宁愿不这样做。)
$(document).ready( function() {
var $value;
$('input[type=text]')
.on('focus', function(){
var $this = $(this);
$value = $(this).val();
globalVar = $value;
if($this.val() == $value){
$this.val('');
}
})
.on('blur', function(){
var $this = $(this);
if($this.val() == ''){
$this.val($value);
}
});
});
请注意,如果有多个'input[type=text]
元素,则不会(或仅偶然)产生正确的结果,因为所有这些元素将共享相同的$value
变量。在这种情况下,您应该使用其他帖子中提到的this.data
解决方案。
答案 2 :(得分:0)
试试这个,
var $value;
$(document).ready( function() {
$('input[type=text]')
.on('focus', function(){
var $this = $(this);
$value = $(this).val();
globalVar = $value;
if($this.val() == $value){
$this.val('');
}
})
.on('blur', function(){
var $this = $(this);
if($this.val() == ''){
$this.val($value);
}
});
});
答案 3 :(得分:0)
在函数外部定义变量,然后为其指定所需的值。
var $value = null;
$(document).ready( function() {
$('input[type=text]')
.on('focus', function(){
var $this = $(this);
$value = $(this).val();
globalVar = $value;
if($this.val() == $value){
$this.val('');
}
})
.on('blur', function(){
var $this = $(this);
if($this.val() == ''){
$this.val($value);
}
});
});