Ответ 1
Вы хотите:
this.value = ''; // straight JS, no jQuery
или
$(this).val(''); // jQuery
С $(this).value = ''
вы назначаете пустую строку в качестве свойства value
объекта jQuery, который обертывает this
- а не value
из this
.
Когда я пытаюсь установить текстовый ввод пустым (при нажатии) с помощью $(this).value=""
, это не сработает. Я должен использовать $(this).val('')
.
Почему? В чем разница? Каков механизм функции val
в jQuery?
$(document).ready(function() {
$('#user_name').focus(function(){
$(this).val('');
});
});
// error code: not working...
$(document).ready(function() {
$('#user_name').focus(function(){
$(this).value='';
});
});
Вы хотите:
this.value = ''; // straight JS, no jQuery
или
$(this).val(''); // jQuery
С $(this).value = ''
вы назначаете пустую строку в качестве свойства value
объекта jQuery, который обертывает this
- а не value
из this
.
$(this).value
пытается вызвать свойство 'value' объекта jQuery, которого не существует. Собственный JavaScript имеет свойство "value" для определенных объектов HTML, но если вы работаете с объектом jQuery, вы должны получить доступ к значению, вызвав $(this).val()
.
Обратите внимание, что:
typeof $(this)
- объект JQuery.
и
typeof $(this)[0]
объект HTMLElement
то:
если вы хотите применить .val()
в HTMLElement, вы можете добавить это расширение.
HTMLElement.prototype.val=function(v){
if(typeof v!=='undefined'){this.value=v;return this;}
else{return this.value}
}
Тогда:
document.getElementById('myDiv').val() ==== $('#myDiv').val()
И
document.getElementById('myDiv').val('newVal') ==== $('#myDiv').val('newVal')
العكس
ИНВЕРС:И наоборот, если вы хотите добавить свойство value в объект jQuery, выполните следующие действия:
Загрузите полный исходный код (не уменьшенный) i.e: example http://code.jquery.com/jquery-1.11.1.js.
Вставьте строку после L96, добавьте этот код value:""
, чтобы инициализировать эту новую опору
Искать в jQuery.fn.init
, это будет почти строка 2747
value
prop: (Перед возвратом statment добавьте this.value=jQuery(selector).val()
)
Одна вещь, которую вы можете сделать, это следующее:
$(this)[0].value = "Something";
Это позволяет jQuery возвращать объект javascript для этого элемента, и вы можете обходить функции jQuery.