Функции на ".on("input", "#id", function(){});"
Всех приветствую, товарищи!
Написал несколько одинаковых функций: $("body").on("input", "#name", function() { if($(this).val().length > 1){ $.ajax ({ url: ajaxFile, type: "POST", data: ({ toima: "nameList", inpVal: $(this).val() }), dataType: "html", success: function(data) { $(".nameListTop").remove(); $("#nameTd").append(data); } }); } }); И для того, чтобы не повторять, вывел функцию отдельно и хотел вызывать его параметрами: function autocomplete1 (btnName, nameTd) { if($(this).val().length > 1){ $.ajax ({ url: ajaxFile, type: "POST", data: ({ toima: btnName, inpVal: $(this).val() }), dataType: "html", success: function(data) { $(".nameListTop").remove(); $(nameTd).append(data); } }); } } $("body").on("input", "#name", autocomplete1 ("nameList", "#nameTd")); $("body").on("input", "#tel", autocomplete1 ("telList", "#telTd")); Но так выдаёт ошибку, скрипт jQuery тоже затрагивает: "Uncaught TypeError: can't access property "toLowerCase", e.nodeName is undefined val jQuery autocomplete1 https://ostaservis.tatar/js/scriptMoharrir.js:18 <anonymous> https://ostaservis.tatar/js/scriptMoharrir.js:36" Не могли бы подсказать, из-за чего такая ошибка выдаётся и как это можно исправить? |
Круглые скобочки на конце функции означают её вызов. Если вы где-то в коде написали func() - в этом месте будет не функция, а то что она вернула.
function func() { return 'value' } $("body").on("input", "#name", func()); // тоже самое что $("body").on("input", "#name", 'value');Если функция ничего не возвращает(нет return) - то там будет undefined. Если бы тебе не нужны были особые параметры для каждого случая - можно было бы ограничиться красиво: $("body").on("input", "#tel", autocomplete1); Но раз они нужны, то либо делать так: function autocomplete1 (btnName, nameTd) { return function() { if($(this).val().length > 1){ $.ajax ({ url: ajaxFile, type: "POST", data: ({ toima: btnName, inpVal: $(this).val() }), dataType: "html", success: function(data) { $(".nameListTop").remove(); $(nameTd).append(data); } }); } } } $("body").on("input", "#name", autocomplete1 ("nameList", "#nameTd")); $("body").on("input", "#tel", autocomplete1 ("telList", "#telTd")); Либо доставать эти параметры внутри: var paramsTable = { name: ["nameList", "#nameTd"], tel: ["telList", "#telTd"] } function autocomplete1 () { var [btnName, nameTd] = paramsTable[this.id]; if($(this).val().length > 1){ $.ajax ({ url: ajaxFile, type: "POST", data: ({ toima: btnName, inpVal: $(this).val() }), dataType: "html", success: function(data) { $(".nameListTop").remove(); $(nameTd).append(data); } }); } } $("body").on("input", "#name, #tel", autocomplete1); |
Aetae,
Спасибо большое!!! |
Часовой пояс GMT +3, время: 15:40. |