【问题标题】:Validating jquery rating stars验证 jquery 星级
【发布时间】:2013-09-24 08:01:59
【问题描述】:

您好,我正在尝试使用 jquery validate 验证一些 jquery 明星。我在这里找到了几个关于这个的答案,但都没有运气。

这是查看源代码中的 HTML,原因是我在 Rails 上

但它不起作用,我如何验证评级星,使其成为强制性要求,XD!谢谢..我已经研究了好几天了,请帮助-

正如我所说,我已经尝试了其他问题的答案,但它们对我不起作用

<div id="pasescortos"> 
    <label for="attribute">Short passes</label>
<span class="star-rating-control">
<div class="rating-cancel"><a title="Cancel Rating"></a></div>
<div class="star-rating rater-0 star star-rating-applied star-rating-live" id="player_short_passes_1">

<a title="1">1</a></div><div class="star-rating rater-0 star star-rating-applied star-rating-live" id="player_short_passes_2">

<a title="2">2</a></div><div class="star-rating rater-0 star star-rating-applied star-rating-live" id="player_short_passes_3">

<a title="3">3</a></div><div class="star-rating rater-0 star star-rating-applied star-rating-live" id="player_short_passes_4">

<a title="4">4</a></div><div class="star-rating rater-0 star star-rating-applied star-rating-live" id="player_short_passes_5">

<a title="5">5</a></div></span>

<input class="star star-rating-applied" id="player_short_passes_1" name="player[short_passes]" type="radio" value="1" style="display: none;">

<input class="star star-rating-applied" id="player_short_passes_2" name="player[short_passes]" type="radio" value="2" style="display: none;">

<input class="star star-rating-applied" id="player_short_passes_3" name="player[short_passes]" type="radio" value="3" style="display: none;">

<input class="star star-rating-applied" id="player_short_passes_4" name="player[short_passes]" type="radio" value="4" style="display: none;">

<input class="star star-rating-applied" id="player_short_passes_5" name="player[short_passes]" type="radio" value="5" style="display: none;">

  </div>

这里是 JS。

$().ready(function() {

  // validate signup form on keyup and submit
$(".edit_player").validate({
ignore:'', // initialize the plugin
        errorElement: 'div'});




$("#player_position").rules("add", { required: true,  messages: { required: "<%= t('generales.camporequerido') %>"}});

$("#player_short_passes_1").rules("add", { required: true,  messages: { required: "<%= t('generales.camporequerido') %>"}});


$("#player_dominant_leg").rules("add", { required: true,  messages: { required: "<%= t('generales.camporequerido') %>"}});

});





jQuery.extend(jQuery.validator.messages, {
    required: "<%= t('generales.camporequerido') %>",
    remote: "Please fix this field.",
    email: "Ingresa un correo electrónico válido.",
    url: "Please enter a valid URL.",
    date: "Please enter a valid date.",
    dateISO: "Please enter a valid date (ISO).",
    number: "Please enter a valid number.",
    digits: "Please enter only digits.",
    creditcard: "Please enter a valid credit card number.",
    equalTo: "Please enter the same value again.",
    accept: "Please enter a value with a valid extension.",
    maxlength: jQuery.validator.format("Please enter no more than {0} characters."),
    minlength: jQuery.validator.format("Please enter at least {0} characters."),
    rangelength: jQuery.validator.format("Please enter a value between {0} and {1} characters long."),
    range: jQuery.validator.format("Please enter a value between {0} and {1}."),
    max: jQuery.validator.format("Please enter a value less than or equal to {0}."),
    min: jQuery.validator.format("Please enter a value greater than or equal to {0}.")
});

编辑1:

我在 HTML 查看源中注意到我的表单有这个 novalidate=""

 <form accept-charset="UTF-8" action="/player_steps/skills?locale=en" class="edit_player" id="edit_player_17" method="post" novalidate="novalidate">

奇怪的是我在 Rails 视图中没有 novalidate 标记,它是在 jquery.validate.js 中生成的,对吗?

这就是我在 rails 中的表单的外观。

<%= form_for @player, :url => wizard_path do |f| %>

在 jquery.rating.js 关于 doble id 问题我发现了这个.. 我该如何解决它?

// insert rating star
            var star = $('<div class="star-rating rater-'+ control.serial +'"><a title="' + (this.title || this.value) + '">' + this.value + '</a></div>');
            rater.append(star);

            // inherit attributes from input element
            if(this.id) star.attr('id', this.id);
            if(this.className) star.addClass(this.className);

【问题讨论】:

  • 问题是什么?
  • 如果我试图验证,但我不能,无论如何..我会编辑问题,谢谢!

标签: javascript jquery ruby-on-rails-3 validation


【解决方案1】:

你在正确的轨道上,但你有几个小错误。

首先,您有两个具有相同 ID 的东西 - 每个星星一个,每个收音机一个。每个元素只能有一个唯一 ID。当您在这种情况下调用$("#player_short_passes_1") 时会发生什么,然后变得未定义(很可能是您获得了具有该 ID 的第一个创建元素)。设置这些规则的更好方法是在您的验证调用中添加一个rules 选项:

$(".edit_player").validate({
    ignore:'', // initialize the plugin
    errorElement: 'div',
    rules: {
      'player[short_passes]': {
        required:true
      }
   }
});

请记住,规则是由输入的名称定义的,而不是由 ID 定义的。注意player[short_passes]键必须在规则对象中引用,否则Javascript会抛出错误。

另一件事是确保.edit_player 实际上是一种形式。 jQuery Validate 仅适用于表单,而不适用于 div。

工作示例(ish - 我没有得到星号插件,所以您只需点击其中一个数字):http://jsfiddle.net/ryleyb/RghSK/

【讨论】:

  • 好吧,我只想指出这一点,双 ID 是由我的评级 js 文件生成的,因为在 RAils 中,我只是生成单选按钮 .. 那些 div 不在 html 中,它们出现一旦你“运行”了网站..我怎么能改变那个ID?我迷路了
  • 老实说,您不需要修复它 - 只需按我的建议引用输入,按名称。您会在我的示例中看到我留下了双 ID。可能应该通知编写该插件的人:)
  • 好的,我正在尝试修复 ID 问题以进行测试,即使使用双 ID 我也会进行测试,谢谢
猜你喜欢
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
相关资源
最近更新 更多