Как получить пользовательское значение элемента jQuery?

#javascript #jquery #underscore.js

#javascript #jquery #underscore.js

Вопрос:

Я пытаюсь выполнить проверку. В котором я решаю добавить сообщение об ошибке и проверку true или false, даже функцию проверки для элемента в самом элементе.

  _.each(this.bindings, function(keys, index) {
                var element = this.$('#' index); //i am getting element
                if(keys.validate amp;amp; keys.validate === true) {
                    element.validate = true; //i am setting attributes works
                    element.errorMessage = "user name must" //this too works
                }

                element.on('focus',function(){ //it works but i am not get the values what i added.
                    console.log(this.errorMessage); //consoles as undefined..how to fix?
                })

        })
  

как я могу добавить методы, атрибуты к самому элементу и вызвать его, когда мне нужно. У меня есть 50 страниц проверки. поэтому я не хочу работать отдельно.

Я делаю свою собственную проверку, не рекомендуйте мне плагин.

заранее спасибо.

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

1. Вы пытались поместить событие фокусировки вне цикла.

2. вы должны поместить все в функцию, а затем назначить ее элементу следующим образом: $('#myElement').data('myFunction',createdFunctionName())

3. Я верю, что это сработает. но использование цикла меня сильно сэкономит. Но я не пробовал то, что вы говорите

4. @AminJafari, я не понял с вашим комментарием. можете ли вы дать мне какой-нибудь подробный ответ?

Ответ №1:

проблема заключается в ссылке на элемент, внутри цикла element ссылается на объект jQuery, к которому вы добавляете новые свойства, но внутри обработчика событий this ссылается на элемент dom, который не имеет новых свойств, которые вы добавили.

 _.each(this.bindings, function (keys, index) {
    var element = this.$('#'   index); //i am getting element
    if (keys.validate amp;amp; keys.validate === true) {
        //here element is a jQuery object not a dom element reference so
        element[0].validate = true; //i am setting attributes works
        element[0].errorMessage = "user name must" //this too works
    }

    element.on('focus', function () { //it works but i am not get the values what i added.
        console.log(this.errorMessage); //consoles as undefined..how to fix?
        //here this is dom element reference
    })

})
  

или используйте переменную закрытия element в обработчике событий

 _.each(this.bindings, function (keys, index) {
    var element = this.$('#'   index); //i am getting element
    if (keys.validate amp;amp; keys.validate === true) {
        //here element is a jQuery object not a dom element reference
        element.validate = true; //i am setting attributes works
        element.errorMessage = "user name must" //this too works
    }

    element.on('focus', function () { //it works but i am not get the values what i added.
        console.log(element.errorMessage); //consoles as undefined..how to fix?
        //here this is dom element reference so use the closure variable element to obtain the newly added properties
    })

})
  

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

1. @3gwebtrain можете ли вы попробовать element[0].errorMessage в первом примере … также войти console.log(element[0])

2. второй метод, похоже, работает. и как я могу добавить слушателя к этому, на foucs, blur ..? то же, что и другие методы?

3. как я могу попросить сделать вызов, всегда, чтобы мой элемент стал состоянием включения?

Ответ №2:

Попробуйте использовать jQuery.data() -метод:

 _.each(this.bindings, function(keys, index) {
                var element = $('#' index); //i am getting element
                if(keys.validate amp;amp; keys.validate === true) {
                    element.data('validate', true); //i am setting attributes works
                    element.data('errorMessage', 'user name must') //this too works
                }

                element.on('focus',function(){ //it works but i am not get the values what i added.
                    console.log(this.data('errorMessage')); //consoles as undefined..how to fix?
                })

})
  

Ответ №3:

Я думаю, что решение заключается в использовании .bind вместо .on:

 _.each(this.bindings, function(keys, index) {
                var element = this.$('#' index); //i am getting element
                if(keys.validate amp;amp; keys.validate === true) {
                    element.validate = true; //i am setting attributes works
                    element.errorMessage = "user name must" //this too works
                }

                element.bind('focus',function(){ //it works but i am not get the values what i added.
                    console.log(this.errorMessage); //consoles as undefined..how to fix?
                })

        })