简体   繁体   English

jquery在单击时创建并返回DOM元素

[英]jquery create and return DOM element on click

I have button that creates a div on click.我有按钮可以在点击时创建一个 div。 I want to return this created div when I click a button.当我单击一个按钮时,我想返回这个创建的 div。 But the following code actually returns this button.但是下面的代码实际上返回了这个按钮。

 var create = $('#create').on('click', function(e){

    var content = $('<div class="foo"/>')
     
    return content

})

var test = create.trigger('click')

 console.log(test)

Result is:结果是:

init [div#create, context: document, selector: '#create']

Is this not possible to do this this way or am I missing something?这样做是不可能的,还是我错过了什么?

You're calling a variable ("create") which stores the event listener on the button.您正在调用一个变量(“create”),该变量将事件侦听器存储在按钮上。 This is what it looks like:这是它的样子:

var test = $('#create').on('click', function(e){

    var content = $('<div class="foo"/>')
     
    return content

}).trigger('click')

console.log(test)

This is the solution:这是解决方案:

jQuery jQuery
var create = function() {
  return $('<div class="foo"/>');
};
var createEl = $('#create');
createEl.on('click', function() {
  console.log(create());
  // <div class="foo"></div>
});
createEl.trigger("click");
JavaScript JavaScript
var create = function() {
  var el = document.createElement('div');
  el.className = "foo";
  // Add other attributes if you'd like
  return el;
};
var createEl = document.querySelector('#create');
createEl.addEventListener("click", function() {
  console.log(create());
  // <div class="foo"></div>
});
createEl.click();

(jQuery) Live example (jQuery) 现场示例

 var create = function() { return $('<div class="foo"/>'); }; var createEl = $('#create'); createEl.on('click', function() { console.log(create()); // <div class="foo"></div> });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <button id="create">Create</button>

(JavaScript) Live example (JavaScript) 现场示例

var create = function() {
  var el = document.createElement('div');
  el.className = "foo";
  // Add other attributes if you'd like
  return el;
};
var createEl = document.querySelector('#create');
createEl.addEventListener("click", function() {
  console.log(create());
  // <div class="foo"></div>
});
createEl.trigger("click");

 var create = function() { var el = document.createElement('div'); el.className = "foo"; // Add other attributes if you'd like return el; }; var createEl = document.querySelector('#create'); createEl.addEventListener("click", function() { console.log(create()); // <div class="foo"></div> });
 <button id="create">Create</button>

No, it is not possible.不,这是不可能的。 You can add a function which will be executed in your event handler to do something with the object you create in the listener:您可以添加一个将在事件处理程序中执行的函数,以对您在侦听器中创建的对象执行某些操作:

var create = $('#create').on('click', function(e){

    var content = $('<div class="foo"/>')
     
    doSomething(content)

})

create.trigger('click')

function doSomething(test) {
    console.log(test)
}

There is no other way and it is because the handler function assigned with .on() method is called when the browser triggers an event (or you use .trigger() method) and the return statement is used only to force calling event.stopPropagation() and event.preventDefault() methods (you have to return false in the handler or just assign false instead of a function as an event handler - check the documentation , section The event handler and its environment ) and not to return any value when you trigger an event manually.没有其他方法,这是因为当浏览器触发事件​​(或者您使用.trigger()方法)时,会调用分配给.on()方法的处理程序函数,而 return 语句仅用于强制调用event.stopPropagation()event.preventDefault()方法(您必须在处理程序中返回false或仅分配false而不是函数作为事件处理程序 - 检查文档事件处理程序及其环境部分)并且在以下情况下不返回任何值您手动触发事件。

You can also use an external variable to store the data "generated" in your event handler:您还可以使用外部变量将“生成”的数据存储在您的事件处理程序中:

const divs = []

var create = $('#create').on('click', function(e){

    var content = $('<div class="foo"/>')
    
    divs.push(content)

    doSomething()

})

create.trigger('click')

function doSomething() {
    console.dir(divs)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM