2011-12-20 2 views
0

Я хочу очистить поле ввода при его нажатии, но только при первом нажатии. С JQuery, вы можете достичь это следующим образом: положить следующий фрагмент кода в любом месте документа (предполагая, что элемент с идентификатором = inputf уже загружен):Как применить функцию jQuery .one() к элементу через атрибут 'onclick'

$('#inputf').one("click", function() { 
    $(this).val(""); 
}); 

Как вы можете видеть в приведенном выше фрагменте кода, ввод поле должно иметь атрибут id со значением inputf.
Но есть способ, чтобы переместить этот фрагмент в атрибуте поля ввода onclick, как

<input type="text" onclick="$(this)....val('')" /> 

? Похоже, что я не могу использовать функцию .one(), потому что этой функции требуется строка, содержащая один или несколько типов событий JavaScript. Но я просто хочу, чтобы .one() выполнялся каждый раз, когда он вызывается, без указания одного или нескольких типов событий.

+2

Использование кода JavaScript внутри ваши HTML-теги все равно не рекомендуется, потому что всегда полезно полностью разделить ваш сценарий (и стили), где его легко найти. Но нет, вы не можете использовать '.one' таким образом, потому что это метод jQuery, а не событие JavaScript. Не похоже, что вы даже можете использовать '.off' для удаления обработчика onclick, поскольку это удаляет только события, которые были добавлены с помощью' .on'. – Blazemonger

+1

Возможно, если вы сказали нам, что вы в конечном итоге пытались выполнить, мы могли бы помочь вам найти правильный метод для использования ... – ShaneBlake

+0

Вы делаете это предпочтительным/правильным/самым простым/умным способом в первом примере. Не переходите к смешанной разметке/логике. Каковы бы ни были причины, по которым вы пытаетесь это сделать, будут перевешиваться позитивами сохранения кода. – Stephen

ответ

1

Публиковать это только с тех пор, как вы просили, я не сторонник встроенных обработчиков.

<input type="text" onclick="this.onclick = null; this.value = ''; " /> 

http://jsfiddle.net/aUmNK/

+0

Как это ответить на вопрос? Это удаляет обработчик onclick и предупреждает об этом. Это не приведет к удалению текста во входном поле. –

+0

@XyanEwing Точка для нее должна быть эквивалентной '.one()'. независимо от кода предупреждения, подразумевается любой код, который вам нравится, например, очистить элемент. Очистка кода элемента ('$ (this) .... val ('')') уже была в OP. – Esailija

+0

no it's not> _>/shame –

1
<input type="text" onclick="if(flagCount === 0){this.value='';flagCount++;}" /> 

объявить var flagCount = 0 в качестве глобальной переменной в script тега в head.

+1

Если вам нужно сделать это таким образом, это способ сделать это. :/ –

+0

@Xyan точно :) –

0

Если вы хотите сделать это для всех полей ввода текста, вы можете сделать:

$("input[type=text]").each(function(){ 
    $(this).one("click", function() {$(this).val = "";}); 
}); 

... или вы можете уточнить селектор, чтобы получить все поля ввода в той или иной DIV, например:

$("#divId input[type=text]") 
+0

... или просто '$ (" input [type = text] "). One (" click ", function() {$ (this) .val (" ");}) ; ':) – Stefan

0

Вам не нужно JQuery, чтобы сделать событие, как one на теге элемента. Просто сделать что-то вроде этого:

<input onclick="function(event) { /* do something */ this.onclick = function(){}; }" /> 

Ваша функция будет выполняться только в первый раз, то новая пустота функция будет прикреплена к функции обратного вызова OnClick событие.

0

Вы можете просто написать свой собственный простой JQuery плагин:

(function($) { 
    $.fn.clearOnce = function() { 

    this.one("click", function() { 
    $(this).val(""); 
    }); 

    }; 
})(jQuery); 

После этого вы можете:

<input type="text" onclick="$(this).clearOnce();" /> 

писал в 3 мин, не испытанной ;-)

Смежные вопросы