как связать функцию и тег вместе

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть функция, которую я хочу привязать к некоторым тегам ввода. Вы можете увидеть два примера во фрагменте кода ниже. второй пример работает до сих пор, но я хочу использовать функцию чаще, поэтому я попытался сделать ее самостоятельной. Вы можете увидеть результат моей попытки в первом примере. это не работает. Я не понял, как я должен связать функцию и тег вместе. Может ли sombody помочь?

 var tags = [ 'Test', 'noch ein Test', 'Testwort'];	

/* Example one: This doesn't work*/
function narrow() {
		//var $x = e.data.x;
		var isValid = false;
		for (i in x) {
			if (x[i].toLowerCase().match(this.value.toLowerCase())) {
				isValid = true;
			}
		}
		if (!isValid) {
			this.value = previousValue
		} else {
			previousValue = this.value;
		}
}

$( "#_id" ).autocomplete({
              minLength: 0,
              source: tags
});
$('#_id').bind('keyup', {x: tags}, narrow);

/* Example two: This works*/
$( "#_id_2" ).autocomplete({
              minLength: 0,
              source: tags
}).keyup(function() {
    var isValid = false;
    for (i in tags) {
        if (tags[i].toLowerCase().match(this.value.toLowerCase())) {
            isValid = true;
        }
    }
    if (!isValid) {
        this.value = previousValue
    } else {
        previousValue = this.value;
    }
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js"></script>
<input id="_id" name="xxx"> <input id="_id_2" name="xxxy">  

Ответ №1:

Измените свой цикл for на narrow на:

 function narrow() {
    ...
    for (i in tags) {
       if (tags[i].toLowerCase().match(this.value.toLowerCase())) {
            isValid = true;
        }
...
  

и измените привязку keyup на:

 $('#_id').bind('keyup', narrow);
  

Комментарии:

1. но это не решает проблему. для каждого ввода у меня есть разные теги

Ответ №2:

вы можете попробовать использовать приведенный ниже скрипт:

 $('#_id').bind('input keydown mousedown', function() {...});
  

Надеюсь, это решит вашу проблему.

Спасибо

Комментарии:

1. проблема заключалась в том, что я хотел иметь одну функцию, которую я мог бы использовать для ввода a с помощью tagss_a и ввода b с помощью tags_b и ввода c с помощью tags_c и т.д.

2. функция должна быть самостоятельной, как показано в первом примере. потому что я не хочу иметь один и тот же код на каждом входе. и каждый ввод использует автозаполнение с другими тегами внутри…

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

4. ДА. Каждый ввод имеет функцию автозаполнения с собственными тегами, а функция, которую вы видите в моем примере один и два, приводит к тому, что вы можете выбирать только теги автозаполнения, но никаких других тегов. И эту функцию я хочу иметь для всех моих полей автозаполнения ввода, чтобы мне не приходилось писать один и тот же код для каждого из них.