javascript订阅表单更改

时间:2013-10-23 15:02:54

标签: javascript php

我有这个代码用于表单输出,但我想更改结果,以便它将加载两个将订阅和取消订阅的按钮,我该怎么做? 试图

<div><a onclick="$('div#newsletter_message').load('index.php?route=module/newsletter/callback&subscribe=' + $('input[name=\'subscribe\']:checked').val(1) + '&email=' + escape($('input[name=\'newsletter_email\']').val()) + '&name=' + escape($('input[name=\'newsletter_name\']').val()), function() { $('div#newsletter_message').hide(); $('div#newsletter_message').show('slow'); });" class="buttons"><span style="float:left; clear:both;">Subscribe</span></a></div>

<div><a onclick="$('div#newsletter_message').load('index.php?route=module/newsletter/callback&subscribe=' + $('input[name=\'subscribe\']:checked').val(0) + '&email=' + escape($('input[name=\'newsletter_email\']').val()) + '&name=' + escape($('input[name=\'newsletter_name\']').val()), function() { $('div#newsletter_message').hide(); $('div#newsletter_message').show('slow'); });" class="buttons"><span style="float:left; clear:both;">Unsubscribe</span></a></div>

但没效果

<div class="box">
  <!-- <div class="box-heading"><?php echo $heading_title; ?></div> -->
  <h3><?php echo $heading_title; ?></h3>
  <div class="box-content">
    <div id="newsletter_message" class="content" style="display:none; background: #FFFFCC; border: 1px solid #FFCC33; padding: 10px; margin-top: 2px; margin-bottom: 15px;"></div>
    <form action="<?php echo $action; ?>" method="post" id="module_newsletter" name="module_newsletter">
      <div style="text-align: left;">
        <span class="required">*</span><b><?php echo $entry_email; ?></b><br />
        <input style="width:90%;" type="text" name="newsletter_email" required placeholder="<?php echo $entry_email; ?>"/><br />
        <?php if ($name == 'optional') { ?>
        <b><?php echo $entry_name; ?></b><br />
        <input style="width:90%;" type="text" name="newsletter_name" placeholder="<?php echo $entry_name; ?>"/>
        <?php } elseif ($name == 'required') { ?>
        <span class="required">*</span><b><?php echo $entry_name; ?></b><br />
        <input style="width:90%;" type="text" name="newsletter_name" placeholder="<?php echo $entry_name; ?>"/>
        <?php } else { ?>
        <input type="hidden" name="name" value="" />
        <?php } ?>
        <br />
        <input name="subscribe" value="1" type="hidden" />
      </div>
      <table style="align:left;">
        <tr>
          <td style="width: 100%;">
            <table>
              <tr>
                <td><input type="radio" style="vertical-align: middle;" id="subscribe" name="subscribe" value="1" checked="checked"/><label style="font-size:10px; vertical-align: middle;" for="subscribe"><?php echo $text_subscribe; ?></label></td>
              </tr>
              <tr>
                <td><input type="radio" style="vertical-align: middle;" id="unsubscribe" name="subscribe" value="0" /><label style="font-size:10px; vertical-align: middle;" for="unsubscribe"><?php echo $text_unsubscribe; ?></label></td>
              </tr>
            </table>
          </td>
          <td></td>
        </tr>
      </table>
      <div><a onclick="$('div#newsletter_message').load('index.php?route=module/newsletter/callback&subscribe=' + $('input[name=\'subscribe\']:checked').val() + '&email=' + escape($('input[name=\'newsletter_email\']').val()) + '&name=' + escape($('input[name=\'newsletter_name\']').val()), function() { $('div#newsletter_message').hide(); $('div#newsletter_message').show('slow'); });" class="buttons"><span style="float:left; clear:both;"><?php echo $button_go; ?></span></a></div>

    </form>
  </div>
</div>

2 个答案:

答案 0 :(得分:0)

替换此......

$('input[name=\'subscribe\']:checked').val()

有了......

$('input[name=subscribe]:radio:checked').val()

您需要:radio选择器,因为您还有一个具有相同名称的隐藏表单输入。请记住,对于非JavaScript用户,此事实可能会对您的表单产生什么影响。

答案 1 :(得分:0)

根据要求,这是一个更彻底的答案。我无法帮助您修复所有代码,因为这超出了Stack Overflow的范围,但是这可以帮助您入门。

基本工作示例:http://jsfiddle.net/jeb2x/

假设你有一张表格......

<form id="SubscribeForm">
    <input type="radio" name="subscribe" value="1" checked="checked" />
    <input type="radio" name="subscribe" value="0" />
    <a href="#" id="alert">Alert selected value</a>
</form>

您可以订阅ID为alert的链接的点击事件,并让其提醒所选的单选按钮值。这个Javascript代码应该在你的html的单独文件中,并使用脚本标记包含在头部。

<script type="text/javascript" src="/pathtofile/scripts.js"></script>

...

$(document).ready(function(){
    $('#SubscribeForm').on('click', 'a#alert', function(){
        var selectedValue = $('input[name=subscribe]:checked').val();
        alert(selectedValue);
    });
});

为了理解这里的代码,您需要了解一些原则。

首先,它订阅了文档的ready事件。这确保代码仅在DOM完成加载时运行,因此,您的表单绝对可以使用。还有一种订阅文档就绪的简写方法,即将匿名函数传递给jQuery,它知道在DOM上运行它

$(function(){
    //...code here
});

然后订阅表单的click事件。此代码使用称为事件委派的原则,值得一读。这个简单的例子并不是真的需要它,但是如果你需要绑定到同一个div中的多个事件,那么它是有利的。在这种情况下,代码可以简化为......

$('a#alert').on('click', function(){
    var selectedValue = $('input[name=subscribe]:checked').val();
    alert(selectedValue);
});

......甚至只是$('a#alert').click(function(){

然后代码使用我的原始解决方案(减去:radio选择器,这是不需要的,因为只有一组输入名称为'subscribe'),以提醒所选值。

在您的情况下,您尝试调用外部脚本以订阅或取消订阅用户。一种方法是使用AJAX请求。您可以使用多种方法中的任何一种来执行此操作。您正在使用上面的load方法,该方法会向提供的网址发送请求,并将响应插入所选元素。

$("#result").load( "test.html" );

在此示例中,test.html的响应将插入ID为result的元素中。如果你想对响应做一些更复杂的事情,你可以使用jQuery的AJAX方法之一,例如$.ajax()$.get()

希望这会有所帮助:)