如何将一个变量从clicked元素传递给DialogBox

时间:2017-02-02 16:32:09

标签: jquery ajax jquery-ui-dialog

这是我的代码:

$(function(){
    $( "#dialogLoad" ).dialog({
	       autoOpen: false,
               modal: true,
               title: 'DATE REELLE CHARGEMENT',
               width: 300,
               buttons: {
                  OK: function() {
                    event.preventDefault();
                    var regdate = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2})$|^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2}\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d)$/;
                    //alert($('#dateReelleChargement').val());
                    if(!regdate.test($('#dateReelleChargement').val()))
                    {                       
                        $('#errLoad').text("La date doit être au format jj/mm/aaaa");
                    }
                    else
                    {
                        //Here AJAX
                        alert("Here i would like to display loaded_383")
                        $(this).dialog("close");
                    }
                  }
               },
            });
            $( ".loaded" ).click(function() {
               $( "#dialogLoad" ).dialog( "open" );
            });
         });
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel = "stylesheet">
<script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
<script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>

<div><a id="loaded_383" class="loaded" href="#">Test</a></div>
  
<div id ="dialogLoad">
    <p>Vous devez entrer une date de chargement réel</p>
    <input type="hidden" autofocus="autofocus" />
    <input id="dateReelleChargement" type="text" /><br /><br />
    <div id="errLoad" style="color: red;"></div>
</div>

对于我的ajax请求,我需要点击元素的ID:

$(".loaded")

如何传递变量:

$(this).attr('id)

在对话框参数中?实际上,'this'在第一个函数中不起作用,因为它会使dialogBox失效,而不是我点击的元素。

非常感谢你。

3 个答案:

答案 0 :(得分:1)

你可以在$(function(){...})之外定义一个变量并在里面使用它。

var id;
$(function(){
    $( "#dialogLoad" ).dialog({
	       autoOpen: false,
               modal: true,
               title: 'DATE REELLE CHARGEMENT',
               width: 300,
               buttons: {
                  OK: function() {
                    event.preventDefault();
                    var regdate = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2})$|^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2}\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d)$/;
                    //alert($('#dateReelleChargement').val());
                    if(!regdate.test($('#dateReelleChargement').val()))
                    {                       
                        $('#errLoad').text("La date doit être au format jj/mm/aaaa");
                    }
                    else
                    {
                        //Here AJAX
                        alert(id);
                        alert("Here i would like to display loaded_383")
                        $(this).dialog("close");
                    }
                  }
               },
            });
            $( ".loaded" ).click(function() {
               id = $(this).attr('id');
               $( "#dialogLoad" ).dialog( "open" );
            });
         });
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel = "stylesheet">
<script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
<script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>

<div><a id="loaded_383" class="loaded" href="#">Test</a></div>
  
<div id ="dialogLoad">
    <p>Vous devez entrer une date de chargement réel</p>
    <input type="hidden" autofocus="autofocus" />
    <input id="dateReelleChargement" type="text" /><br /><br />
    <div id="errLoad" style="color: red;"></div>
</div>

答案 1 :(得分:1)

这是一个不使用全局变量的更好的解决方案。您可以在对话框中设置.data()并通过它传递数据。希望这会有所帮助。

&#13;
&#13;
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel = "stylesheet">
<script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
<script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>

<div><a id="loaded_383" class="loaded" href="#">Test</a></div>
  
<div id ="dialogLoad">
    <p>Vous devez entrer une date de chargement réel</p>
    <input type="hidden" autofocus="autofocus" />
    <input id="dateReelleChargement" type="text" /><br /><br />
    <div id="errLoad" style="color: red;"></div>
</div>
&#13;
@Transactional(propagation=Propagation.MANDATORY)
public interface MyRepository extends CrudRepository<Something, Long> {
    @Override
    public Something findOne(Long id);
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你能不能只将id存储到变量中。这样你就不必依赖于这个&#39;这个&#39;对象

而不是:

   alert($(this).attr('id'));

尝试:

   var id = $(this).attr('id');

然后在到达ajax代码时使用它。在最坏的情况下,您甚至可以将变量设为全局变量。