2013-04-19 3 views
0

я создаю звездный рейтинг окно ... моя страница PHP как нижеJQuery плагин установленное значение этого

<html> 
<head> 
    <script src='jquery.js'></script> 
    <script src='alamStars.js'></script> 
    <script> 
    $().ready(function(){ 
     $("#txtStar").alamStar(); 
    }); 
    </script> 

</head> 
<body> 
<?php 
if(isset($_GET[])) 
{ 
    echo $_GET['txtStar']; 
} 
?> 
<form> 
    <input type='text' name='txtStar' id='txtStar'> 
    <input type='submit'> 
</form> 
</body> 
</html> 

мой плагин код, как показано ниже

;(function ($) { 
    $.fn.alamStar = function (options) {  
    var defaultVal = { 
     img: '../images/start_rating.png', 
     width: 105, 
     height: 120 
    }; //end array of default values 

    var obj = $.extend(defaultVal, options);//overwrite default values if there 
    this.after("<div id='alamStarBox' stars='"+this.val()+"'></div>");//dynamically create div 
    var alamStarBox=$("#alamStarBox");//assign alamStarBox to a variable 
    alamStarBox.html(this.val());//set initial value from textbox 

    alamStarBox.css({ 
     'color'    : 'red', 
     'background-image' : 'url('+obj.img+')', 
     'max-width'   : obj.width+"px", 
     'max-height'  : obj.height+"px", 
     'overflow'   : 'hidden' 
    });//end styling css to alamStarBox 

    alamStarBox.mousemove(function(e){ 
    var l=alamStarBox.offset().left;//Left value of alaStarBox 
    var c=parseInt(e.pageX)+21;//current-position 

    if(c>(parseInt(l)+parseInt(10))) 
    { 
     $(this).html("0"); 
     $(this).css('background-position-Y','0px'); 
    } 
    if(c>(parseInt(l)+parseInt(30))) 
    { 
     $(this).html("1"); 
     $(this).css('background-position-Y','-20px'); 
    } 
    if(c>(parseInt(l)+parseInt(50))) 
    { 
     $(this).html("2"); 
     $(this).css('background-position-Y','-40px'); 
    } 
    if(c>(parseInt(l)+parseInt(70))) 
    { 
     $(this).html("3"); 
     $(this).css('background-positionY','-60px'); 
    } 
    if(c>(parseInt(l)+parseInt(90))) 
    { 
     $(this).html("4"); 
     $(this).css('background-positionY','-80px'); 
    } 
    if(c>(parseInt(l)+parseInt(110))) 
    { 
     $(this).html("5"); 
     $(this).css('background-positionY','-100px'); 
    } 
});//end moue move function 

alamStarBox.mouseout(function(){ 
    var p=parseInt($(this).attr("stars"))*20; 
    $(this).css('background-positionY','-'+p+'px'); 
    $(this).html($(this).attr("stars")); 
});//end function alamStarBox mouseOut 

alamStarBox.click(function(){ 
    $(this).attr("stars",$(this).text()); 
});//end function alamStarBox click 

var frm=this.closest("form"); 
frm.submit(function(){ 
    this.val(alamStarBox.text());//on submit form copy text from starbox to textBox 
    //////////////////////////////////the above line is not working//////////////// 
}); 

};//end alamStar function 
})(jQuery); 

Я хочу установить текстовое поле значение, равное div text, в последней функции с именем frm.submit
, но он не работает даже при назначении статической строки как «статическое значение»

+0

Замените '$(). Готовый (функция() {' с '$ (документ) .ready (функция() {' или '$ (функция() {' –

+0

где я могу добавить возврат к chaining –

ответ

1

Y Ты должен сохранить копию this в родительской функции в другую переменную, которую можно затем ссылаться в функции обратного вызова, как это:

var self = this; 
var frm = this.closest("form"); 
frm.submit(function(){ 
    self.val(alamStarBox.text()); //on submit form copy text from starbox to textBox 
}); 

Это происходит потому, что внутри представить функцию обратного вызова this будет иметь другое значение (скорее всего это будет объект DOM формы). Использование локальной переменной с именем self или that или me - очень общий шаблон проектирования, позволяющий ссылаться на исходный объект внутри локальной функции обратного вызова.

+1

это тоже работает –

0

Вы используете обратный вызов в методе jQuery .submit формы, поэтому this, скорее всего, не то, что вы думаете о нем (войдите в консоль, чтобы увидеть, что это на самом деле).

Даже $(this) здесь не будет работать, потому что это будет сама форма - и при вызове .val() на этом нет никакого смысла.

Выберите поле ввода явно в этой функции, то он должен работать: $("#txtStar").val(…)

0

Либо вы используете предложение jfriend00 или вы можете использовать $ .proxy(), которые изменяют сферу представить hanlder к оригиналу «это " стоимость.

frm.submit($.proxy(function(){ 
    this.val(alamStarBox.text()); // NOW this=your textbox #txtStar 
}, this)); 
+0

это сработало для меня –

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